Python kodunuzun loglarını takip etmek istiyorsanız program çalışırken oluşan hataları veya mesajları bir log dosyasına yardırabilirsiniz. Bu log dosyası yazılımınızın geçmişe dönük çalışmasıyla ilgili size bilgi verecektir. Python'da en popüler log oluşturma kütüphanesi logger kütüphanesidir. Logger yazılımını bilgisayarımıza yükleyerek başlayalım.
pip install logger
Modülü yükledikten sonra yazılıma import edelim.
import logging
İlk olarak oluşturduğumuz log için bir isim tanımı yapalım.
logger = logging.getLogger("Log_adı")
Mesaj seviyesi belirleyelim, bu seviye ve üzerindeki loglar alınır. Örneğin: Error seçilirse sadece error ve critical logları alınır.
Seviyeler:
- debug
- info
- warning
- error
- critical
logger.setLevel(logging.DEBUG)
Logların yazılacağı dosyanın belirlenmesi;
logging.basicConfig(filename='dosya_adi.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filemode="w", level=logging.DEBUG)
Burada filemode="w" ise her çalıştırmada eski dosya silinerek yeni dosya oluşturulur. filemode="a" ise bilgiler eski dosyaya eklenerek kaydedilir. Ekrana yazdırma parametreleri;
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
Log formatı;
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
asctime = Çalışma zamanı
name = Log adı
levelname = Log level
message = Yazdığınız veya sistemden okuduğu hata mesajı.
pathname = Dosyanın bulunduğu dizin.
lineno = Kodun çalıştırdığı satır.
Ekrana yazılacak veriye format uygulanması
ch.setFormatter(formatter)
logger.addHandler(ch)
Yazılır.
#Uygulama mesaj formatları;
Print komutunu kullanır gibi aşağıdaki formatta yazdığınız tüm mesajlar log dosyasında oluşacaktır.
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
Kodun tamamı
logger = logging.getLogger('Log_adı')
logger.setLevel(logging.DEBUG)
logging.basicConfig(filename='dosya_adi.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d', filemode="w", level=logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
ch.setFormatter(formatter)
logger.addHandler(ch)
Tavsiye edilen kullanım:
import os
logger_name=os.path.basename(__file__)
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
logging.basicConfig(filename=logger_name+'.log', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d', filemode="w", level=logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(pathname)s:%(lineno)d')
ch.setFormatter(formatter)
logger.addHandler(ch)
Python Log'larını otomatik olarak mail atmak için
Koda aşağıdaki satırları da ekleyerek mail atma işlemini de gerçekleştirebilirsiniz.
import logging.handlers
Sender_pwd = "passWord" #Password kullanımı opsiyoneldir...
smtpHandler = logging.handlers.SMTPHandler(
mailhost=("localhost", 25),
fromaddr="noreply@domain.com",
toaddrs="user@email.com",
subject="Dikkat!",
credentials=(Mail_sender, Sender_pwd))
smtpHandler.setLevel(logging.DEBUG)
logger.addHandler(smtpHandler)
Not: Mail atarken alarm seviyesini warning olarak ayarlayın, yoksa çok fazla mail ile karşı karşıya kalabilirsiniz.