Ich habe die Dokumentation des Logging-Moduls gelesen und während ich etwas offensichtlich übersehen habe, scheint der Code, den ich habe, nicht wie vorgesehen zu funktionieren. Ich benutze Python 2.6.4.Python Logging über mehrere Dateien
Mein Programm besteht aus mehreren verschiedenen Python-Dateien, von denen ich Logging-Nachrichten an eine Textdatei und möglicherweise den Bildschirm senden möchte. Ich stelle mir vor, das ist eine gewöhnliche Sache, ich mache das irgendwo durcheinander.
Was mein Code zur Zeit tut, ist korrekt in die Textdatei einzuloggen, irgendwie. Die Protokollierung auf dem Bildschirm wird jedoch dupliziert, eine mit der angegebenen Formatierung und eine ohne. Wenn ich die Bildschirmausgabe ausschalte, bekomme ich den Text immer noch einmal gedruckt, was ich nicht möchte - ich möchte nur, dass er in der Datei gespeichert wird.
Wie auch immer, einige 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)
Nichts dort ungewöhnlich.
#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 diese 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 Text-Datei, die korrekt formatierte Ausgabe wird immer, um den Bildschirm Protokollierung in logger.py ausschalten noch die falsch formatierte Ausgabe angezeigt .
Von dem, was ich von den Dokumenten verstehe, Aufruf von corelog.debug(), da Corelog ein Kind der "Stolpern" Logger ist, sollte es diese Formatierung verwenden und die Protokolle als solche ausgeben.
Entschuldigung für den Aufsatz über solch eine triviale Frage.
TL; DR: Wie protokolliere ich mehrere Dateien?
Wow , Spot auf. Ich hatte logging.basicConfig() wird immer noch in einigen meiner anderen Module verwendet. Es ist mir NIEMALS eingefallen, dass sie die Probleme verursachen könnten. Vielen Dank! – Loix0