Yükleniyor...

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

python
PYTHON Code
import 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

python
PYTHON Code
import 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

Başlamaya Hazır

Bilginizi Test Edin

Bu konudaki anlayışınızı pratik sorularla test edin.

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 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