GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Python-Protokollierung - Speicherort der Protokolldateien überprüfen?

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

Linux
  1. So verwalten Sie Protokolldateien mit Logrotate unter Linux

  2. Nur übertragene Dateien mit Rsync protokollieren?

  3. Linux-Logdateien

  4. So verwenden Sie Logrotate zum Verwalten von Protokolldateien

  5. Speicherort der ini/config-Dateien in Linux/Unix?

So überprüfen Sie die Python-Version in Linux, Mac und Windows

So überprüfen Sie die Python-Version

So erstellen Sie eine Rsyslog-Konfiguration für die zentrale Protokollierung

So rotieren Sie Apache-Protokolldateien unter Linux

Protokolldateien mit Cron-Job entfernen

Alle /var/log löschen?