Loglama
Loglama, modern yazılım geliştirme ve sistem mimarisinde kritik bir uygulamadır. Loglama, uygulamanın çalışma zamanı davranışlarını, hatalarını, performans metriklerini ve olaylarını kaydetmek için kullanılan bir tekniktir. Etkili loglama, sistemlerin izlenebilirliğini artırır, hataların hızlı tespitini sağlar ve bakım süreçlerini kolaylaştırır. Özellikle dağıtık sistemler, mikroservis mimarileri ve yüksek performanslı backend uygulamalarında loglama, uygulama sağlığı ve güvenilirlik için vazgeçilmezdir.
Python'da logging
modülü, loglama işlemleri için güçlü ve esnek bir çözüm sunar. Anahtar kavramlar arasında log seviyeleri, handler ve formatter kullanımı, veri yapıları ile log yönetimi, algoritmalar ile performans optimizasyonu ve OOP prensipleri ile modüler yapıların oluşturulması bulunur.
Bu eğitim içeriğinde okuyucu, temel loglama konseptlerinden başlayarak ileri seviye uygulamalara kadar bilgi edinecek; loglama konfigürasyonu, thread-safe loglama, dosya rotasyonu ve performans optimizasyon tekniklerini öğrenecektir. Eğitim sonunda katılımcılar, gerçek dünya backend sistemlerinde güvenli, ölçeklenebilir ve etkili loglama çözümleri uygulayabilecek bilgiye sahip olacaklardır.
Temel Örnek
pythonimport logging
# Temel logger konfigürasyonu
logging.basicConfig(level=logging.INFO,
format='%(asctime)s \[%(levelname)s] %(message)s',
filename='uygulama.log',
filemode='a')
# Log mesajları
logging.debug("Hata ayıklama bilgisi")
logging.info("Uygulama başlatıldı")
logging.warning("Uyarı: olası problem")
logging.error("Hata oluştu")
logging.critical("Kritik sistem hatası")
print("Temel loglama tamamlandı. 'uygulama.log' dosyasını kontrol edin.")
Bu örnekte, Python logging
modülü kullanılarak temel loglama gerçekleştirilmektedir. basicConfig
fonksiyonu ile logger konfigüre edilir; seviyeler, format ve hedef dosya belirlenir. level=logging.INFO
ile sadece INFO ve üzeri seviyeler kaydedilir.
Format, zaman damgası, seviye ve mesaj bilgilerini içerir, bu sayede loglar okunabilir ve standart bir yapıya sahip olur. debug
, info
, warning
, error
ve critical
metodları farklı önem seviyelerini temsil eder.
Bu yaklaşım, loglama mantığını uygulama kodundan ayırır ve iyi bir backend uygulama pratiği olan modülerliği sağlar. Ayrıca logların doğru şekilde tutulmasını güvence altına alır, bellek sızıntılarını önler ve hataların takip edilmesini kolaylaştırır.
Pratik Örnek
pythonimport logging
import logging.handlers
import threading
import queue
import time
class GuvenliLogger:
def init(self, log_dosyasi):
self.logger = logging.getLogger("GuvenliLogger")
self.logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s \[%(levelname)s] %(message)s')
# Rotasyonlu dosya handler
file_handler = logging.handlers.RotatingFileHandler(log_dosyasi, maxBytes=1024*1024, backupCount=3)
file_handler.setFormatter(formatter)
self.logger.addHandler(file_handler)
# Thread-safe loglama için kuyruk
self.log_kuyrugu = queue.Queue()
self.lock = threading.Lock()
def log(self, seviye, mesaj):
self.log_kuyrugu.put((seviye, mesaj))
def flush(self):
with self.lock:
while not self.log_kuyrugu.empty():
seviye, mesaj = self.log_kuyrugu.get()
self.logger.log(seviye, mesaj)
# Logger kullanımı
logger = GuvenliLogger("uygulama.log")
def ornek_gorev(id):
logger.log(logging.INFO, f"Görev {id} başladı")
time.sleep(0.1)
logger.log(logging.ERROR, f"Görev {id} hata ile tamamlandı")
threads = \[]
for i in range(5):
t = threading.Thread(target=ornek_gorev, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
logger.flush()
print("Thread-safe loglama tamamlandı. 'uygulama.log' dosyasını kontrol edin.")
Bu örnek, çoklu thread ortamında güvenli loglama gösterir. GuvenliLogger
sınıfı OOP prensipleri ile modüler bir yapı sunar. RotatingFileHandler
, log dosyalarının boyutunu yönetir ve yedekler oluşturur.
queue.Queue
ve threading.Lock
kullanımı, thread-safe loglama sağlar, koşullar yarışını önler ve log dosyalarının bozulmasını engeller. Görevler INFO ve ERROR seviyelerinde log mesajları üretir, gerçek dünya uygulamalarını simüle eder.
Bu yapı, yüksek yük ve dağıtık sistemlerde kullanılabilir, performans, güvenlik ve sürdürülebilirlik açısından en iyi uygulamaları gösterir.
En iyi uygulamalar ve sık yapılan hatalar:
- Log seviyelerini doğru kullanın: DEBUG, INFO, WARNING, ERROR, CRITICAL
- FileHandler ve RotatingFileHandler ile dosya yönetimi
- Logger mantığını OOP ile kapsülleyin
- Çoklu thread için Queue ve Lock kullanın
- Tutarlı format ve timestamp kullanın
- Handler'ları kapatarak bellek sızıntılarını önleyin
- Hataları loglama sırasında yakalayın
- Hassas bilgileri loglamaktan kaçının
Sık yapılan hatalar arasında aşırı detaylı loglama, thread-safe güvenliğinin ihmal edilmesi, log rotasyonu olmaması ve verimsiz I/O işlemleri bulunur. Yüksek performanslı sistemlerde asenkron loglama ve batch yazma önerilir.
📊 Referans Tablosu
Element/Concept | Description | Usage Example |
---|---|---|
Logger Nesnesi | Loglama işlevselliğini kapsüller | logger = logging.getLogger("Logger") |
Log Seviyeleri | Mesajları önem derecesine göre sınıflandırır | logging.INFO, logging.ERROR |
Handler | Logları farklı hedeflere yönlendirir | logging.FileHandler("uygulama.log") |
Formatter | Mesaj formatını belirler | logging.Formatter('%(asctime)s \[%(levelname)s] %(message)s') |
Queue | Thread-safe loglama sağlar | queue.Queue() |
RotatingFileHandler | Büyük log dosyalarını yönetir | logging.handlers.RotatingFileHandler("uygulama.log", maxBytes=1048576, backupCount=3) |
Loglama, sistemlerin izlenebilirliğini ve güvenilirliğini artırır. Seviyelerin, handler ve formatter’ların doğru kullanımı, thread-safe uygulamalar ve performans optimizasyonu, başarılı bir loglama stratejisinin temelini oluşturur.
Sonraki adımlar, asenkron loglama teknikleri, merkezi loglama sistemleri (ELK, Graylog) ve mikroservis mimarilerinde log entegrasyonu üzerine odaklanabilir. Hassas verilerin korunması ve log detay seviyesinin dengelenmesi, gerçek dünya uygulamalarında kritik öneme sahiptir.
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu konudaki anlayışınızı pratik sorularla test edin.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek