İşleyiciler, Biçimlendiriciler ve Filtreler
Günlük çıktısını dosyalara, akışlara ve özel hedeflere yönlendirin.
İşleyiciler, Biçimlendiriciler ve Filtreler, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
İşleyiciler Günlük Kayıtlarını Yönlendirir
Bir işleyici, günlük kayıtlarını bir hedefe gönderir: konsol, dosya, HTTP uç noktası ve benzeri. Bir günlükleyicide birden çok işleyici bulunabilir.
import logging
logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
logger.addHandler(sh)
logger.info("Goes to console")StreamHandler
StreamHandler, bir akışa (varsayılan olarak sys.stderr) yazar. Standart çıktı için sys.stdout aktarın.
import logging, sys
logger = logging.getLogger("out")
handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)
logger.warning("printed to stdout")FileHandler
FileHandler, kayıtları bir dosyanın sonuna ekler. Her çalıştırmada dosyanın üzerine yazmak için mode="w" kullanın.
import logging
logging.basicConfig(
filename="app.log",
filemode="a",
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s"
)
logging.info("Persisted to disk")RotatingFileHandler
Günlük dosyaları boyut sınırını aştığında otomatik olarak döndürün ve N yedek dosyayı koruyun.
from logging.handlers import RotatingFileHandler
import logging
handler = RotatingFileHandler(
"app.log", maxBytes=1_000_000, backupCount=5
)
logging.getLogger().addHandler(handler)TimedRotatingFileHandler
Günlük dosyalarını zamana göre (günlük, haftalık veya saatlik) döndürün; bu yöntem uzun süre çalışan hizmetler için idealdir.
from logging.handlers import TimedRotatingFileHandler
import logging
handler = TimedRotatingFileHandler(
"app.log", when="midnight", backupCount=7
)
logging.getLogger().addHandler(handler)Biçimlendiriciler
Bir Formatter, her günlük kaydının metin düzenini denetler. Bunu bir işleyiciye handler.setFormatter() ile bağlayın.
import logging
fmt = logging.Formatter(
fmt="%(asctime)s %(levelname)-8s %(name)s — %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S"
)
handler = logging.StreamHandler()
handler.setFormatter(fmt)
logging.getLogger().addHandler(handler)İşleyici Düzeyinde Filtreleme
Her işleyicinin kendi seviyesi vardır. Bir kaydın gönderilebilmesi için hem günlükleyici seviyesini hem de işleyici seviyesini geçmesi gerekir.
import logging
logger = logging.getLogger("app")
logger.setLevel(logging.DEBUG) # logger passes DEBUG+
err_handler = logging.FileHandler("errors.log")
err_handler.setLevel(logging.ERROR) # only ERROR+
logger.addHandler(err_handler)Özel Filtreler
logging.Filter sınıfından türetin ve kayıtları herhangi bir ölçüte göre kabul etmek veya reddetmek için filter(record) metodunu geçersiz kılın.
import logging
class SensitiveFilter(logging.Filter):
def filter(self, record):
return "password" not in record.getMessage().lower()
handler = logging.StreamHandler()
handler.addFilter(SensitiveFilter())
logging.getLogger().addHandler(handler)Filtreyle Ek Alanlar Ekleme
Filtreler, biçimlendirmeden önce ek alanlar eklemek için kaydı da değiştirebilir (örneğin istek kimliği).
import logging
class RequestIDFilter(logging.Filter):
def __init__(self, request_id):
self.request_id = request_id
def filter(self, record):
record.request_id = self.request_id
return True
# fmt: "%(request_id)s %(message)s"Tek Bir Günlükleyicide Birden Çok İşleyici
Aynı günlük kayıtlarını eş zamanlı olarak birden çok hedefe göndermek için birkaç işleyici ekleyin.
import logging
logger = logging.getLogger("multi")
logger.addHandler(logging.StreamHandler()) # console
logger.addHandler(logging.FileHandler("audit.log")) # file
logger.setLevel(logging.INFO)
logger.info("Both destinations receive this")Aktarımı Devre Dışı Bırakma
Kayıtların kök günlükleyiciye aktarılmasını ve iki kez günlüklenmesini durdurmak için logger.propagate = False ayarını yapın.
import logging
logger = logging.getLogger("mylib")
logger.propagate = False # stays here, does not reach root
logger.addHandler(logging.StreamHandler())Hızlı Kontrol
Bir Formatter'ı bir Handler'a bağlayan metot hangisidir?
Özet
İşleyiciler kayıtları yönlendirir, biçimlendiriciler kayıtların görünümünü düzenler, filtreler ise kayıtları seçerek geçirir veya engeller. Boyutla sınırlı günlükler için RotatingFileHandler, tarihe dayalı döndürme için TimedRotatingFileHandler kullanın.
Sıkça Sorulan Sorular
“İşleyiciler, Biçimlendiriciler ve Filtreler” dersi ücretsiz mi?
Evet — “İşleyiciler, Biçimlendiriciler ve Filtreler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“İşleyiciler, Biçimlendiriciler ve Filtreler” dersinde ne öğreneceğim?
Günlük çıktısını dosyalara, akışlara ve özel hedeflere yönlendirin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“İşleyiciler, Biçimlendiriciler ve Filtreler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- logging Modülünün Temelleri
- İşleyiciler, Biçimlendiriciler ve Filtreler
- Yapılandırılmış Günlükleme
- pdb ile Hata Ayıklama