In diesem Fall ist Ihr 'child_logger' Ihr Root-Logger. Wenn Sie es wie so initialisiert hatte:
logger = getLogger('root')
child_logger = getLogger('root.child')
child_logger
ist ein Kind von logger
wie definiert durch:
Der Name ist möglicherweise eine Periode getrennten hierarchischen Wert, wie foo.bar.baz (obwohl es könnte auch einfach nur foo sein, zum Beispiel). Logger, die weiter unten in der hierarchischen Liste sind, sind Kinder von Loggern, die weiter oben in der Liste sind. Wenn Sie beispielsweise einen Logger mit dem Namen foo verwenden, sind Logger mit den Namen foo.bar, foo.bar.baz und foo.bam alle Nachkommen von foo. Die Loggernamenshierarchie ist analog zur Python-Pakethierarchie und identisch mit dieser, wenn Sie Ihre Logger pro Modul mit der empfohlenen Konstruktion logging.getLogger (__name__
) organisieren. Das liegt daran, dass __name__
in einem Modul der Name des Moduls im Python-Paketnamespace ist.
Wenn Sie nicht möchten, dass ein Kind sich ausbildet, können Sie logger.propagate
= False
setzen.
Außerdem, wenn Sie möchten, dass nur bestimmte Ebenen geschrieben, um Ihr Kind-Logger-Datei (dh nur debug), aber Sie wollen höhere Ebene noch propagieren Sie eine Unterklasse eines Handlers erstellen könnte, wie in meinem hier:
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)
(Ja, ich weiß, dass es einige Verbesserungen, die gemacht werden können, ist dieser alte Code.)
zum Beispiel debug_logger.info("Info Message")
Ausführung nichts zu den debug_logger des angegebenen Datei würde drucken, aber wenn root_logger
‚s Niveau war auf info eingestellt oder debuggen, es würde es in seiner Datei ausdrucken. Ich benutze dies für die Debug-Protokollierung, während ich immer noch die Möglichkeit behalte, dass der Logger Fehlermeldungen aufruft und diese in das Root-Protokoll schreibt.