📜Raporlama
Python ile raporlama (logging) işlemleri ve logging modülünün kullanımı
🏂 Raporlamaya Giriş
📦 Raporlama işlemleri için
logging
modülü kullanır🍱 Python içerisinde hazır olarak bulunan bir modüldür, indirmeye gerek yok
📜
logging
modülü print yapısından daha kullanışlıdır👨💼 Raporlama seviyeleri ile isteğe bağlı çıktılar verilir
🙄
print
metodu olsaydı if koşulları ile yapmamız gerekirdi
🏗️ Oluşturma İşlemleri
🔨 Yapılandırma ayarları
logging.basicConfig
metodu ile düzenlenir💎
format
ile çıktıların yapısı,level
ile çıktıların sınırı belirlenir🚀
logging.getLogger
metodu__name__
ile kullanıldığında, dosya ismine ait bir raporlayıcı oluşturur👨💼 Oluşturulan yeni raporlayıcılar
setLogger
metodu ile sınırlandırılabilir💁♂️ Bu sınırlandırmalar diğer raporlayıcıları etkilemez
import logging
log_format = (
'%(asctime)s - '
'%(name)s - '
'%(funcName)s - '
'%(levelname)s - '
'%(message)s'
)
log_level = logging.DEBUG
# Tüm raporlayıcıları tanımlama
logging.basicConfig(format=log_format , level=log_level)
logger = logging.getLogger(__name__)
# Belirli bir raporlayıcı sınırlama
logger.setLevel(logging.ERROR)
📢 logging
modülü globaldir, her dosya için ortak log yapısı kullanılır
🎌 Temel Kullanım
Raporlayıcı objenizin debug, info, warn, error, exception, fatal metotları ile raporlama yapabilirsiniz
👮♂️ Her metot karşılığı olan raporlama seviyesine göre raporlama yapar
fatal
CRITICAL seviyesinde raporlama
exception
ERROR seviyesinde hata mesajı ile raporlama
error
ERROR seviyesinde raporlama
warn
WARN seviyesinde raporlama
info
INFO seviyesinde raporlama
debug
DEBUG seviyesinde raporlama
👮♂️ Raporlama Seviyeleri
Raporlama seviyeli yukarıdan aşağıya doğru daha da sınırlı hale gelir.
DEBUG
işlemiERROR
çıktılarını da raporlarERROR
çıktıları kendinden daha düşük çıktıları raporlarmaz
CRITICAL (50)
Exception veya en yüksek seviyeli durumları raporlayan seviyedir
ERROR (40)
Hata durumunda kullanılan raporlama seviyesidir
WARNING (30)
Uyarılar amaçlı kullanılan raporlama seviyesidir
INFO (20)
Ön planda çalışan işlemleri kontrol etmek için kullanılır. Dosya güncelleme, sunucuya bağlanma işlemleri raporlarmak için kullanılır
DEBUG (10)
Arkaplanda yapılan işlemleri kontrol etmek için kullanılır, objeleri oluşturma güncelleme gibi çıktılarınızı bunun ile raporlayabilirinisiz
NOTSET (0)
🤷♂️
📂 Dosyaya Raporlama
import logging
message = "Raporlanacak"
LOG_DIR = "dosya/dizini"
LOG_FILE = "dosya.log"
FLAG = "w" # a+, r
ENCODING = "utf-8"
# Rapolamayı tanımlama
logging.basicConfig(
handlers=[logging.FileHandler(LOG_DIR + LOG_FILE, FLAG, ENCODING)],
level=logging.DEBUG,
format='%(asctime)s: %(message)s'
)
logging.info("mesaj") # Raporu yazma
👨🎨 Detaylı Renkli Raporlama
🧐 Detaylarla ilgilenenler için
colorlog
modülü önerilir🖌 Metinleri
%(log_color)
ve%(reset)s
değişkenleri arasına alarak renklendirebilirsin🙄 İşlemin çalışması için
colorlog.ColorFormatter
objesinilogger
objesine alttaki gibi eklemen lazım
import logging
LOG_LEVEL = logging.DEBUG
LOGFORMAT = (
" %(log_color)s%(levelname)-8s%(reset)s |"
" %(log_color)s%(message)s%(reset)s")
from colorlog import ColoredFormatter
logging.root.setLevel(LOG_LEVEL)
formatter = ColoredFormatter(LOGFORMAT)
stream = logging.StreamHandler()
stream.setLevel(LOG_LEVEL)
stream.setFormatter(formatter)
log = logging.getLogger('pythonConfig')
log.setLevel(LOG_LEVEL)
log.addHandler(stream)
log.debug("A quirky message only developers care about")
log.info("Curious users might want to know this")
log.warn("Something is wrong and any user should be informed")
log.error("Serious stuff, this is red for a reason")
log.critical("OH NO everything is on fire")
🎨 Renkli Raporlama
📦 Renkli raporlama için
coloredlogs
modülü kullanılır⏬ Yüklemek için
pip install coloredlogs
komutunu kullanın💡 Renklendirme için standart konsol renk komutlarını kullanır
👨🔧 Renklendirme çalışmazsa
colorama
modülünü yükleyin⏬ Yüklemek için
pip install colorama
komutunu kullanın
💁♂️ Alternatif olarak, en kolay kullanımı sağlayan
zenglog
modülüne bakmanda fayda var
import coloredlogs
import logging
# Logger objesi oluşturma
logger = logging.getLogger(__name__)
# Tüm raporlama işlemlerinin renkli olmasını sağlar
coloredlogs.install(level='DEBUG')
# Sadece verilen logger'ın renkli olmasını sağlar
coloredlogs.install(level='DEBUG', logger=logger)
# Formatı değiştirme
log_format = ""
+ "%(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] "
+ "%(levelname)s %(message)s"
coloredlogs.install(level='DEBUG', fmt=log_format)
# Örnekler
logger.debug("this is a debugging message")
logger.info("this is an informational message")
logger.warning("this is a warning message")
logger.error("this is an error message")
logger.critical("this is a critical message")

🔨 Yapılandırma Dosyası
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"simple": {
"class": "colorlog.ColoredFormatter",
"format": "%(asctime)s %(log_color)s%(message)s%(reset)s",
"datefmt": "%H:%M:%S"
},
"detailed": {
"class": "logging.Formatter",
"format": "%(asctime)s.%(msecs)03d [%(threadName)s] %(levelname)-7s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
"debug_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "DEBUG",
"formatter": "detailed",
"filename": "log/debug/{filename}.log",
"maxBytes": 10485760,
"backupCount": 20,
"mode": "w",
"encoding": "utf8"
},
"info_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "detailed",
"filename": "log/info/{filename}.log",
"maxBytes": 10485760,
"backupCount": 20,
"mode": "w",
"encoding": "utf8"
},
"warn_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "WARNING",
"formatter": "detailed",
"filename": "log/warning/{filename}.log",
"maxBytes": 10485760,
"backupCount": 20,
"mode": "w",
"encoding": "utf8"
},
"error_file_handler": {
"class": "logging.handlers.RotatingFileHandler",
"level": "ERROR",
"formatter": "detailed",
"filename": "log/error/{filename}.log",
"maxBytes": 10485760,
"backupCount": 20,
"mode": "w",
"encoding": "utf8"
}
},
"loggers": {
"urllib3.connectionpool": {
"level": "ERROR",
"handlers": [
"console"
],
"propagate": false
}
},
"root": {
"level": "DEBUG",
"handlers": [
"console",
"debug_file_handler",
"info_file_handler",
"warn_file_handler",
"error_file_handler"
]
}
}
🔗 Faydalı Bağlantılar
🚀 Bu alandaki bağlantılar YEmoji ~Bağlantılar yapısına uygundur
Last updated
Was this helpful?