16 Haziran 2025 Pazartesi
Script Log kaydı tutmak, yazılım geliştirme süreçlerinde önemli bir uygulamadır. Hata ayıklama, sistem izleme, performans analizi ve güvenlik denetimleri gibi birçok amaç için loglar kullanılabilir. Python, log tutma işlemi için oldukça esnek ve güçlü araçlar sunar. logging modülü, Python’da log kaydı tutmak için yaygın olarak kullanılır ve profesyonel scriptlerde de sıklıkla tercih edilir.
Aşağıda, profesyonel bir scriptte log kaydı tutmanın nasıl yapılacağını, hangi tür log seviyelerinin kullanılacağını ve logların yönetilmesi için en iyi uygulamaları ele alacağız.
logging Modülü İle Temel Log KaydıPython’da log kaydı tutmak için en yaygın kullanılan modül logging’dir. Bu modül, log seviyeleri, çıktı formatı, dosya yönetimi gibi birçok özelliği içerir.
İlk olarak, bir log kaydının nasıl tutulacağını gösterelim:
import logging
# Log seviyesini belirliyoruz
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.StreamHandler()])
# Farklı log seviyelerinde mesajlar
logging.debug("Bu bir DEBUG mesajıdır.")
logging.info("Bu bir INFO mesajıdır.")
logging.warning("Bu bir WARNING mesajıdır.")
logging.error("Bu bir ERROR mesajıdır.")
logging.critical("Bu bir CRITICAL mesajıdır.")
Bu basit örnekte, log seviyelerini (DEBUG, INFO, WARNING, ERROR, CRITICAL) kullanarak farklı önem derecelerinde mesajlar yazıyoruz. basicConfig fonksiyonu, logların biçimini ve hangi seviyeden sonra log kaydı yapılacağını belirler.
level=logging.DEBUG: DEBUG seviyesinden daha yüksek seviyelerdeki loglar kaydedilecektir.format='%(asctime)s - %(levelname)s - %(message)s': Log mesajlarının tarih ve saat bilgisiyle birlikte seviyesini de içerecek şekilde formatı belirliyoruz.Log kaydında kullanılan farklı seviyeler, log mesajının önem derecesini belirtir. Bu seviyeler, sistemdeki olayları daha iyi analiz etmenize olanak tanır.
Logları yalnızca ekrana yazmak yerine bir dosyaya da kaydedebilirsiniz. Bu, geçmiş olayları incelemek ve hata raporları oluşturmak için oldukça kullanışlıdır.
import logging
# Logları hem ekrana hem de dosyaya yazmak için basicConfig
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.FileHandler('app.log'), logging.StreamHandler()])
logging.info("Bu bir dosyaya kaydedilen INFO mesajıdır.")
logging.error("Bu bir dosyaya kaydedilen ERROR mesajıdır.")
Bu örnekte, logging.FileHandler('app.log') kullanılarak logların bir dosyaya yazılması sağlanıyor. Böylece loglar, sadece terminalde değil, aynı zamanda bir dosyada da tutulmuş olur.
Birçok durumda, log dosyasının boyutu arttıkça dosyanın yönetilmesi zorlaşabilir. Log dosyalarının boyutunun kontrol altında tutulması ve belirli aralıklarla yeni dosyaların oluşturulması için RotatingFileHandler kullanılabilir.
import logging
from logging.handlers import RotatingFileHandler
# Log rotası oluşturuluyor ve dosya boyutu sınırı belirleniyor (5MB)
handler = RotatingFileHandler('app.log', maxBytes=5*1024*1024, backupCount=3)
handler.setLevel(logging.INFO)
# Log formatı belirleniyor
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# Logger'ı ayarlıyoruz
logger = logging.getLogger()
logger.addHandler(handler)
# Log mesajı ekliyoruz
logger.info("Log dosyası boyut sınırına ulaştı.")
maxBytes=5*1024*1024: Dosya boyutu 5 MB’yi geçerse yeni bir log dosyası başlatılır.backupCount=3: Eski log dosyalarından 3 yedeğin saklanacağı belirtilir. Bu sayede gereksiz dosyalar birikmez.Log mesajlarının formatı, günlüklerin okunabilirliği için çok önemlidir. Yaygın olarak kullanılan formatlar arasında tarih, saat, log seviyesi ve mesaj yer alır. Daha ayrıntılı bilgi isterseniz, %(name)s, %(filename)s, %(funcName)s gibi özellikleri de formatta kullanabilirsiniz.
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[logging.StreamHandler()])
logger = logging.getLogger('MyApp')
logger.info("Uygulama başlatıldı.")
Burada, %(name)s ile logger adını eklerken, %(filename)s ile log kaydını yapan dosyanın adını da dahil edebiliriz.
Gerçek dünyada, logları daha profesyonel şekilde yönetmek için aşağıdaki uygulamaları da göz önünde bulundurmak önemlidir:
RotatingFileHandler veya TimedRotatingFileHandler kullanarak logların büyümesini kontrol altında tutun.logging modülünü sadece log tutmak için değil, aynı zamanda hata raporlama için de kullanabilirsiniz. Örneğin, loglara izleme kodu (traceback) eklemek için logging.exception() fonksiyonunu kullanabilirsiniz.import logging
try:
x = 1 / 0
except ZeroDivisionError as e:
logging.exception("Bölme hatası oluştu")
Bu, hatayı kaydederken hata mesajı ve traceback bilgisini de içerecektir.
Yüksek kaliteli loglama, yazılımınızın izlenebilirliğini ve hata ayıklama sürecini kolaylaştırır. Profesyonel bir loglama uygulaması için:
Bu şekilde log kaydı tutmak, yazılımınızın bakımını kolaylaştırır ve olası problemlerin hızlıca tespit edilmesini sağlar.