Python’da Logger Kullanımı

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.

 

Hata Yönetimi ve Hata Ayıklama

Comments

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.