Um den Speicherort der Protokolldatei zu finden, versuchen Sie, Ihren log
zu instanziieren Objekt in einer Python-Shell in Ihrer Umgebung und betrachten Sie den Wert von:
log.handlers[0].stream
Die logging
Das Modul verwendet Handler, die an Logger angeschlossen sind, um zu entscheiden, wie, wo oder sogar ob Nachrichten letztendlich gespeichert oder angezeigt werden. Sie können logging
konfigurieren standardmäßig auch in eine Datei schreiben. Sie sollten die Dokumentation wirklich lesen, aber wenn Sie logging.basicConfig(filename=log_file_name)
aufrufen wobei log_file_name
ist der Name der Datei, in die Nachrichten geschrieben werden sollen (beachten Sie, dass Sie dies vor allem anderen in logging
tun müssen überhaupt aufgerufen wird), dann werden alle Nachrichten, die für alle Logger protokolliert wurden (es sei denn, es erfolgt später eine weitere Neukonfiguration), dort geschrieben. Achten Sie jedoch darauf, auf welche Stufe der Logger eingestellt ist; wenn ich mich recht erinnere, info
unter der Standardprotokollebene liegt, also müssten Sie level=logging.INFO
einschließen in den Argumenten zu basicConfig
auch damit Ihre Nachricht in der Datei landet.
Zum anderen Teil Ihrer Frage, logging.getLogger(some_string)
gibt einen Logger
zurück Objekt, eingefügt in die richtige Position in der Hierarchie aus dem Root-Logger, wobei der Name der Wert von some_string
ist . Wird ohne Argumente aufgerufen, gibt es den Root-Logger zurück. __name__
gibt den Namen des aktuellen Moduls zurück, also logging.getLogger(__name__)
gibt einen Logger
zurück Objekt, dessen Name auf den Namen des aktuellen Moduls gesetzt ist. Dies ist ein allgemeines Muster, das mit logging
verwendet wird , da es bewirkt, dass die Loggerstruktur die Modulstruktur Ihres Codes widerspiegelt, wodurch das Protokollieren von Meldungen beim Debuggen oft viel nützlicher wird.
Einige gute Antworten dazu, aber die Top-Antwort hat bei mir nicht funktioniert, weil ich einen anderen Datei-Handler-Typ verwendet habe und der handler.stream nicht den Pfad, sondern das Datei-Handle bereitstellt und den Pfad daraus erhält etwas nicht offensichtlich. Hier ist meine Lösung:
import logging
from logging import FileHandler
# note, this will create a new logger if the name doesn't exist,
# which will have no handlers attached (yet)
logger = logging.getLogger('<name>')
for h in logger.handlers:
# check the handler is a file handler
# (rotating handler etc. inherit from this, so it will still work)
# stream handlers write to stderr, so their filename is not useful to us
if isinstance(h, FileHandler):
# h.stream should be an open file handle, it's name is the path
print(h.stream.name)
Um den Protokollspeicherort eines einfachen Datei-Loggers zu erhalten, versuchen Sie es mit
logging.getLoggerClass().root.handlers[0].baseFilename