it-swarm.com.de

Python-Protokollierung - Speicherort der Protokolldateien prüfen?

Auf welche Weise wissen Sie, wo Python-Protokollanweisungen gespeichert werden?

wenn ich es tue:

import logging
log = logging.getLogger(__name__)
log.info('Test')

Wo finde ich die Logdatei? Auch wenn ich anrufe:

logging.getLogger(__name__)

Hat das irgendwie etwas damit zu tun, wie sich der Logger verhält/speichert?

22
zallarak

Das logging-Modul verwendet Handler, die mit Loggern verbunden sind, um zu entscheiden, wie, wo oder sogar, ob Nachrichten letztendlich gespeichert oder angezeigt werden. Sie können logging standardmäßig so konfigurieren, dass auch in eine Datei geschrieben wird. Sie sollten wirklich die Datei docs lesen, aber wenn Sie logging.basicConfig(filename=log_file_name) aufrufen, wobei log_file_name der Name der Datei ist, in die Nachrichten geschrieben werden sollen (beachten Sie, dass Sie dies tun müssen, bevor etwas anderes in logging aufgerufen wird), dann alle Meldungen, die an alle Logger protokolliert werden (sofern nicht später eine weitere Neukonfiguration erfolgt), werden dort geschrieben. Beachten Sie jedoch, auf welcher Ebene der Logger eingestellt ist. Wenn der Speicher dient, liegt info unter der Standardprotokollebene. Sie müssen also level=logging.INFO in die Argumente von basicConfig einschließen, damit Ihre Nachricht in der Datei endet.

Was den anderen Teil Ihrer Frage betrifft, gibt logging.getLogger(some_string) ein Logger-Objekt zurück, das vom Root-Logger an der richtigen Stelle in der Hierarchie eingefügt wird, wobei der Name der Wert von some_string ist. Wird ohne Argumente aufgerufen, gibt es den Root-Logger zurück. Da __name__ den Namen des aktuellen Moduls zurückgibt, gibt logging.getLogger(__name__) ein Logger-Objekt mit dem Namen des aktuellen Moduls zurück. Dies ist ein allgemeines Muster, das mit logging verwendet wird, da es dazu führt, dass die Loggerstruktur die Modulstruktur Ihres Codes widerspiegelt. Dies macht Protokollnachrichten beim Debuggen oft nützlicher.

19
Silas Ray

Versuchen Sie, den Protokollspeicherort eines einfachen Datei-Loggers abzurufen

logging.getLoggerClass().root.handlers[0].baseFilename
7
Taran

Um den Speicherort der Protokolldatei zu ermitteln, versuchen Sie, Ihr log-Objekt in einer Python-Shell in Ihrer Umgebung zu instantiieren.

log.handlers[0].stream

0
Paul Bissex

Ausgezeichnete Frage @ Zallarak. Unglücklicherweise sind Loggers schwer einsehbar. Dadurch werden die Dateinamen aller Handlers für eine logger abgerufen:

filenames = []
for handler in logger.handlers:
    try:
        filenames.append(handler.fh.name)
    except:
        pass

Der try-Block behandelt Ausnahmen, die auftreten, wenn die Suche nach Dateinamen fehlschlägt.

0
Arthur