Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Doppelte Log Einträge im Python logging Modul

Doppelte Log Einträge im Python logging Modul

Bei einem log Befehl wird der Text mehrfach dargestellt.

Vor allem in Verbindung mit Grok/Zope tritt dieses Phenomän auf.

 

Beispiel:

from sys import stdout
from logging import StreamHandler, getLogger, Formatter, DEBUG, INFO

logger = getLogger("testlogger")
streamHandler = StreamHandler(stdout)
streamFormatter = Formatter('%(asctime)s %(levelname)-8s %(message)s', "%Y-%m-%d %H:%M:%S")
streamHandler.setFormatter(streamFormatter)
logger.addHandler(streamHandler)

logger.setLevel(DEBUG)

logger.info("test")

Die Ausführung dieses Codes resultiert in:

2009-05-27 12:48:10 INFO     test
2009-05-27 12:48:10,763 INFO [testlogger] test

Grund dafür ist die Registrierung mehrerer Streamhandler im logging Modul. Alle neu erstellten Logger haben das "propagate" Attribut auf True gesetzt. Dies bedeutet, dass Log-Einträge eines Loggers auch anderen Loggern mitgeteilt werden.

Setzt man das propergate Flag auf False, werden nur die dem Logger zugeordneten Handler verwendet.

>>> logger.propergate = False
>>> logger.info("test")
2009-05-27 12:57:59 INFO  test