Python’da logging
modülü, uygulamanızın çalışma süresince önemli olayları kaydetmek için kullanılır. logging
modülü, hataların, uyarıların, bilgi mesajlarının ve hata ayıklama bilgilerinin kaydedilmesi gibi birçok farklı log seviyesini destekler. Bu loglar, geliştiricilere ve sistem yöneticilerine bir uygulamanın nasıl çalıştığını ve nerelerde sorunlar olduğunu anlamakta yardımcı olur.
1. logging
Modülünün Temel Kullanımı
Python’da logging
modülü, log mesajlarını terminale veya bir dosyaya yazmak için kullanılabilir. Log mesajları, belirli bir formatta ve belirli bir log seviyesinde kaydedilir.
a. Temel Loglama
import logging
logging.basicConfig(level=logging.INFO)
logging.debug("Bu bir hata ayıklama mesajıdır.")
logging.info("Bu bir bilgi mesajıdır.")
logging.warning("Bu bir uyarı mesajıdır.")
logging.error("Bu bir hata mesajıdır.")
logging.critical("Bu bir kritik hata mesajıdır.")
Bu örnekte, basicConfig()
ile loglama yapılandırılır ve farklı log seviyelerinde mesajlar kaydedilir. level=logging.INFO
ifadesi, INFO ve üzerindeki seviyelerdeki mesajların kaydedileceğini belirtir. Çıktı şu şekilde olabilir:
INFO:root:Bu bir bilgi mesajıdır.
WARNING:root:Bu bir uyarı mesajıdır.
ERROR:root:Bu bir hata mesajıdır.
CRITICAL:root:Bu bir kritik hata mesajıdır.
DEBUG
seviyesi belirtilmediği için, bu mesaj loga yazılmaz.
2. Log Seviyeleri
Python’da logging
modülünde kullanılan çeşitli log seviyeleri vardır:
- DEBUG: Detaylı hata ayıklama bilgileri.
- INFO: Genel bilgi mesajları.
- WARNING: Potansiyel sorunlar hakkında uyarılar.
- ERROR: Hata mesajları.
- CRITICAL: Kritik hata mesajları, programın çalışmasını durdurabilecek durumlar.
Her seviye, altındaki seviyeleri de kapsar. Örneğin, WARNING
seviyesinde loglama yaptığınızda, WARNING
, ERROR
, ve CRITICAL
seviyelerindeki mesajlar kaydedilir.
3. Log Formatlama
Log mesajlarının nasıl görüneceğini belirlemek için format
parametresi kullanılır. Bu, log mesajlarının zaman damgası, log seviyesi, log mesajı gibi bilgileri içermesini sağlar.
a. Log Formatlama Örneği
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logging.info("Bu bir bilgi mesajıdır.")
Bu örnekte, log mesajları belirli bir formatta kaydedilir. Format aşağıdaki bilgileri içerir:
%(asctime)s
: Mesajın kaydedildiği zaman.%(name)s
: Logger’ın adı.%(levelname)s
: Log seviyesi (INFO, WARNING, vb.).%(message)s
: Log mesajı.
Çıktı şu şekilde olabilir:
2024-08-31 10:00:00,000 - root - INFO - Bu bir bilgi mesajıdır.
4. Logları Dosyaya Yazma
Log mesajlarını terminale yazmak yerine bir dosyaya kaydetmek için filename
parametresi kullanılır.
a. Logları Dosyaya Yazma Örneği
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
filename="uygulama.log",
filemode="w"
)
logging.info("Bu bir dosyaya yazılan bilgi mesajıdır.")
Bu örnekte, log mesajları uygulama.log
dosyasına kaydedilir. filemode="w"
parametresi, dosyanın üzerine yazılacağını belirtir; filemode="a"
kullanırsanız, mesajlar dosyanın sonuna eklenir.
5. Özel Logger Tanımlama
Bazen, loglama yapmak için root
logger yerine kendi logger’ınızı tanımlamak isteyebilirsiniz. Bu, özellikle büyük uygulamalarda logları daha iyi organize etmek için faydalıdır.
a. Özel Logger Oluşturma
import logging
# Özel bir logger oluşturun
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
# Konsola loglama için bir handler ekleyin
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Format belirleyin ve handler'a ekleyin
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
# Logger'a handler'ı ekleyin
logger.addHandler(console_handler)
# Log mesajları oluşturun
logger.debug("Bu bir hata ayıklama mesajıdır.")
logger.info("Bu bir bilgi mesajıdır.")
logger.warning("Bu bir uyarı mesajıdır.")
Bu örnekte, my_logger
adında bir logger oluşturulur ve bu logger, hem StreamHandler
(konsola yazdırmak için) hem de özel bir format ile yapılandırılır.
6. Birden Fazla Handler Kullanma
Bir logger’a birden fazla handler ekleyebilirsiniz. Örneğin, log mesajlarını hem dosyaya hem de konsola yazdırabilirsiniz.
a. Birden Fazla Handler Örneği
import logging
logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
# Konsol handler
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# Dosya handler
file_handler = logging.FileHandler("uygulama.log")
file_handler.setLevel(logging.WARNING)
# Formatter
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# Logger'a handler'ları ekleyin
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# Log mesajları oluşturun
logger.debug("Bu konsola yazılır.")
logger.warning("Bu hem konsola hem de dosyaya yazılır.")
Bu örnekte, DEBUG
seviyesindeki mesajlar sadece konsola, WARNING
seviyesindeki ve üzerindeki mesajlar ise hem konsola hem de dosyaya yazdırılır.
7. Loglama Seviyelerini Geçici Olarak Değiştirme
Bazen, geçici olarak log seviyesini değiştirmek isteyebilirsiniz. Bunun için setLevel()
metodunu kullanabilirsiniz.
a. Loglama Seviyesini Değiştirme Örneği
logger.setLevel(logging.ERROR)
logger.info("Bu mesaj gösterilmez.")
logger.error("Bu mesaj gösterilir.")
Bu örnekte, log seviyesi ERROR
olarak değiştirildiği için sadece ERROR
seviyesindeki mesajlar gösterilir.
Python’da logging
modülü, uygulamalarınızda hata ayıklama, hata izleme ve bilgi toplama işlemlerini sistematik bir şekilde yapmanıza olanak tanır. Farklı log seviyeleri, formatlar ve handler’lar kullanarak loglarınızı özelleştirebilir, hem konsola hem de dosyalara log yazabilirsiniz. Bu, özellikle büyük projelerde hataları izlemek ve uygulamanın durumunu anlamak için kritik öneme sahiptir.
Bir yanıt yazın