Bu durumda, 'child_logger' sizin kök kaydedicinizdir. Bunu gibi başlatıldı olsaydı:
adı olsa (foo.bar.baz gibi, potansiyel bir noktayla ayrılan hiyerarşik değerdir: ile tanımlanan
logger = getLogger('root')
child_logger = getLogger('root.child')
child_logger
logger
çocuğudur Örneğin, sadece basit bir foo olabilir). Hiyerarşik listede daha aşağı olan logger'lar, listede yukarıdan yukarı kaydedicilerin çocuklarıdır. Örneğin, bir foo ismiyle bir logger verilmişse, foo.bar, foo.bar.baz ve foo.bam isimlerinin yer aldığı logger'lar foo'nun soyundan gelenlerdir. Logger ad hiyerarşisi, Python paket hiyerarşisine benzer ve önerilen yapı logging.getLogger (__name__
) kullanılarak kaydedicilerinizi modül başına düzenlerseniz, aynıdır. Çünkü bir modülde, __name__
, Python paket ad alanındaki modülün adıdır. Eğer yayılmasının bir çocuk istemiyorsanız
, sen = False
logger.propagate
ayarlayabilirsiniz.
Ayrıca, çocuğunuzun logger dosyası (yani sadece hata ayıklama) yazılır sadece belirli düzeylerde istiyorum ama burada mayın olduğu gibi yine yaymak için üst düzey, bir işleyici bir alt sınıfını oluşturabilir isterseniz:
from logging import DEBUG, INFO, WARN, ERROR, CRITICAL, handlers
class DebugRotatingFileHandler(handlers.RotatingFileHandler):
def __init__(self, filename, mode, maxBytes, backupCount, encoding, delay):
super(DebugRotatingFileHandler, self).__init__(
self, filename, mode, maxBytes, backupCount, encoding, delay)
def emit(self, record):
if record.levelno != DEBUG:
return
super(DebugRotatingFileHandler, self).emit(self, record)
(Evet, yapılabilir bazı gelişmeler olduğunu biliyorum bu eski kodudur.) Örneğin
, root_logger
'ın seviyesi ise, ancak, debug_logger en belirtilen dosyaya şey basacaktır debug_logger.info("Info Message")
infaz Bilgiye veya hata ayıklığına ayarlı, dosyanın içine yazdı. Ben hata ayıklama günlüğü için kullanıyorum, hala kaydedici hata mesajı çağrıları yapmak ve bunları kök günlüğüne yazdırmak için yeteneği korurken.