Kendi Logger Framework'ü Geliştirme: Python ile Adım Adım

Her projenin iyi bir logging sistemi gerekir. Standart `logging` modülü güçlü ama bazen kendi framework'ünüz daha esnektir. Basit ama işlevsel bir logger yazalım.

Problemi kısaca: Konsolda ve dosyaya yazan, log seviyelerini kontrol eden, timestamp ekleyen ve hata ayıklamayı kolaylaştıran bir sistem istiyoruz.

çalışan çözüm:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import os
2import sys
3from datetime import datetime
4from enum import Enum
5
6class LogLevel(Enum):
7DEBUG = 1
8INFO = 2
9WARNING = 3
10ERROR = 4
11CRITICAL = 5
12
13class SimpleLogger:
14def __init__(self, name, log_file=None, min_level=LogLevel.INFO):
15self.name = name
16self.log_file = log_file
17self.min_level = min_level
18
19if log_file:
20os.makedirs(os.path.dirname(log_file) or '.', exist_ok=True)
21
22def _format_message(self, level, message):
23timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
24return f"[{timestamp}] [{level.name}] {self.name}: {message}"
25
26def _write(self, level, message):
27if level.value < self.min_level.value:
28return
29
30formatted = self._format_message(level, message)
31print(formatted)
32
33if self.log_file:
34with open(self.log_file, 'a', encoding='utf-8') as f:
35f.write(formatted + '\n')
36
37def debug(self, message):
38self._write(LogLevel.DEBUG, message)
39
40def info(self, message):
41self._write(LogLevel.INFO, message)
42
43def warning(self, message):
44self._write(LogLevel.WARNING, message)
45
46def error(self, message):
47self._write(LogLevel.ERROR, message)
48
49def critical(self, message):
50self._write(LogLevel.CRITICAL, message)
51
52# Kullanım
53logger = SimpleLogger('MyApp', log_file='app.log', min_level=LogLevel.DEBUG)
54
55logger.debug('Başlangıç mesajı')
56logger.info('Uygulama başladı')
57logger.warning('Uyarı: Hafıza kullanımı yüksek')
58logger.error('Veritabanı bağlantısı başarısız')
59logger.critical('Sistem çöküyor!')

Beklenen Çıktı:

1[2024-01-15 14:23:45] [DEBUG] MyApp: Başlangıç mesajı
2[2024-01-15 14:23:45] [INFO] MyApp: Uygulama başladı
3[2024-01-15 14:23:45] [WARNING] MyApp: Uyarı: Hafıza kullanımı yüksek
4[2024-01-15 14:23:45] [ERROR] MyApp: Veritabanı bağlantısı başarısız
5[2024-01-15 14:23:45] [CRITICAL] MyApp: Sistem çöküyor!

Kodu `app.log` dosyasına da kaydedilir.

Sık Yapılan Hata: `min_level=LogLevel.WARNING` ayarladığınızda DEBUG ve INFO mesajları görünmez, bu tasarım gereğidir. Geliştirme sırasında `LogLevel.DEBUG` kullanın.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz