Ich habe durch die Logging-Modul-Dokumentation gelesen und während ich etwas offensichtlich verpasst haben kann, der Code, den ich habe, scheint nicht zu funktionieren, wie beabsichtigt. Ich bin mit Python 2.6.4.
Mein Programm besteht aus mehreren verschiedenen Python-Dateien, von denen ich Logging-Meldungen an eine Textdatei und möglicherweise an den Bildschirm senden möchte. Ich nehme an, dies ist eine gemeinsame Sache zu tun, so dass ich dies irgendwo durcheinander.
Was mein Code im Moment macht, ist die korrekte Protokollierung in der Textdatei, irgendwie. Aber die Protokollierung auf dem Bildschirm wird dupliziert, eine mit der angegebenen Formatierung, und eine ohne. Auch, wenn ich die Bildschirmausgabe deaktivieren, ich bin immer noch den Text einmal gedruckt, die ich nicht will - ich will nur, dass es in die Datei protokolliert werden.
Wie auch immer, etwas Code:
#logger.py
import logging
from logging.handlers import RotatingFileHandler
import os
def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
logdir = os.path.abspath(logdir)
if not os.path.exists(logdir):
os.mkdir(logdir)
log = logging.getLogger('stumbler')
log.setLevel(loglevel)
log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")
if txtlog:
txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
txt_handler.doRollover()
txt_handler.setFormatter(log_formatter)
log.addHandler(txt_handler)
log.info("Logger initialised.")
if scrnlog:
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
log.addHandler(console_handler)
Das ist nichts Ungewöhnliches.
#core.py
import logging
corelog = logging.getLogger('stumbler.core') # From what I understand of the docs, this should work :/
class Stumbler:
[...]
corelog.debug("Messages and rainbows...")
Die Bildschirmausgabe zeigt, wie dies dupliziert wird:
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
Obwohl die Textdatei die korrekt formatierte Ausgabe erhält, wird beim Ausschalten der Bildschirmaufzeichnung in logger.py weiterhin die falsch formatierte Ausgabe angezeigt.
Nach dem, was ich aus den Dokumenten verstehe, sollte der Aufruf von corelog.debug(), da corelog ein Kind des "stumbler"-Loggers ist, diese Formatierung verwenden und die Protokolle als solche ausgeben.
Ich entschuldige mich für den Aufsatz über ein so triviales Thema.
TL;DR: Wie führe ich die Protokollierung von mehreren Dateien durch?