Python Yazılımı İçin Log Oluşturma

 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:

  1. debug
  2. info
  3. warning
  4. error
  5. 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.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

Kodun tamamı

import logging
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 logging
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

Mail_sender = "email_user@domain.com"
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)
smtpHandler.setFormatter(formatter)
logger.addHandler(smtpHandler)

Not: Mail atarken alarm seviyesini warning olarak ayarlayın, yoksa çok fazla mail ile karşı karşıya kalabilirsiniz.


Google