Offizielle Website Logging HOWTO
Grundlegendes Protokollierungs-Tutorial
Logging
Die Protokollierung wird verwendet, um Ereignisse zu verfolgen, die während der Ausführung der Software ausgelöst werden. logging calls
Dem Code werden Entwicklerprotokolle hinzugefügt, um anzuzeigen, dass etwas passiert ist. Ein Ereignis wird durch eine Nachricht beschrieben, die einige variable Daten enthalten kann (z. B. kann jedes Auftreten des Ereignisses unterschiedliche Daten erzeugen). Ereignisse haben ihre eigene Bedeutung, genanntlevel or severity
Wann sollte die Protokollierung verwendet werden?
Logging
Stellt einige direkt aufrufbare Methoden für die einfache Protokollierung bereit debug(), info(), warning(), error(), critical()
. In der folgenden Tabelle finden Sie die Situationen, in denen die Protokollierung verwendet werden kann
Aufgabe | Werkzeug |
---|---|
Gewöhnliche Befehle oder Programme werden an die Konsole ausgegeben | print() |
Melden Sie Ereignisse, die während des normalen Programmbetriebs ausgelöst wurden (Zustandsüberwachung oder Fehleruntersuchung). | logging.info() ( logging.debug() detaillierte Diagnose) |
Warnt vor bestimmten Ereignissen, die zur Laufzeit auftreten | warnings.warn() : Im Bibliothekscode, wenn das Problem vermeidbar ist und die Clientanwendung geändert werden sollte, um die Warnung zu beseitigen. logging.warning() : Wenn die Client-Anwendung nichts gegen den Zustand unternehmen kann, aber dennoch auf das Ereignis achten sollte |
Meldet den angegebenen Fehler zur Laufzeit | Ausnahme auslösenexception |
Unterdrückte Fehler melden, ohne Ausnahmen auszulösen (z. B. Fehlerhandler in Serverprozessen mit langer Laufzeit) | logging.error(), logging.exception() or logging.critical() für bestimmte Fehler und Anwendungsdomänen |
logging
Die Funktionen werden nach dem Ereignis, mit dem sie verfolgt werden level or severity
, dem Standardniveau und ihrer Anwendbarkeit wie folgt benannt (in der Reihenfolge zunehmender Schwere):
Eben | Wenn es verwendet wird |
---|---|
DEBUG |
Detaillierte Informationen, die normalerweise nur bei der Diagnose eines Problems von Bedeutung sind |
INFO |
Bestätigen Sie, dass alles wie erwartet funktioniert |
WARNING |
Ein Zeichen dafür, dass etwas Unerwartetes passiert ist oder dass in naher Zukunft ein Problem aufgetreten ist (z. B. zu wenig Speicherplatz) und das Programm weiterhin normal funktioniert |
ERROR |
Aufgrund schwerwiegenderer Probleme kann die Software bestimmte Funktionen nicht ausführen |
CRITICAL |
Ein schwerwiegender Fehler, der darauf hinweist, dass das Programm selbst möglicherweise nicht weiter ausgeführt wird |
Der Standardwert ist WARNING
, was bedeutet, dass nur Ereignisse dieser Stufe und höher verfolgt werden, sofern die Protokollpaketkonfiguration nicht geändert wird. Verfolgte
Ereignisse können unterschiedlich behandelt werden. Der einfachste Weg, Trace-Ereignisse zu verarbeiten, besteht darin, sie auf der Konsole auszugeben. Eine andere übliche Methode besteht darin, sie in eine Festplattendatei zu schreiben
Ein einfaches Beispiel
>>>import logging
>>>logging.warning('watch out') # 输出信息到控制台
WARNING:root:watch out
>>>logging.info('told you') # 不会打印出任何信息
INFO
Die Informationen werden nicht ausgegeben, da ihr Pegel niedriger ist WARNING
. Die Ausgabeinformationen umfassen die Anzeigestufe WARNUNG und die Beschreibung „Achtung“. Das Ausgabeformat kann ebenfalls geändert werden.
Protokollierung in einer Datei
Ein häufiger Fall ist die Protokollierung von logging
Ereignissen in einer Datei
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('this message should go to the log file')
logging.info('so should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
Führen Sie den obigen Code aus, um eine Datei zu generieren example.log
. Der Inhalt ist wie folgt
DEBUG:root:this message should go to the log file
INFO:root:so should this
WARNING:root:And this, too
ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
Es ist level
auf eingestellt DEBUG
, sodass alle Informationen ausgegeben werden.
Bei jeder Ausführung werden der Datei Informationen hinzugefügt. Wenn Sie nur die neuesten Informationen aufzeichnen möchten, verwenden Sie filemode
Parameter
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
Protokollierung von mehreren Modulen
Wenn Ihr Programm mehrere Module enthält, können Sie sich gegenseitig aufrufen myapp.py
und mylib.py
alle Informationen werden ausgegebenmyapp.log
# mylib.py
import logging
def do_something():
logging.info('do something')
# myapp.py
import mylib
import logging
def main():
logging.basicConfig(filename='myapp.log', level=logging.INFO)
logging.info('start')
mylib.do_something()
logging.info('finish')
if __name__ == '__main__':
main()
INFO:root:start
INFO:root:do something
INFO:root:finish
Protokollierung variabler Daten
Um variable Daten zu protokollieren, verwenden Sie die Formatzeichenfolge der Ereignisbeschreibungsnachricht und hängen Sie die variablen Daten als Argument an.
import logging
logging.warning('%s before you %s', 'look', 'leap!')
WARNING:root:look before you leap!
Das Format hier verwendet den alten %-Stil, und das neueste Format wird ebenfalls unterstützt, siehe Verwenden bestimmter Formatierungsstile in Ihrer gesamten Anwendung
Ändern des Formats der angezeigten Nachrichten
Um das zum Anzeigen von Nachrichten verwendete Format zu ändern, müssen Sie das zu verwendende Format angeben
import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
logging.debug('This message should appear on the console')
logging.info('So should this')
logging.warning('And this, too')
DEBUG:This message should appear on the console
INFO:So should this
WARNING:And this, too
root verschwindet hier
Datum/Uhrzeit in Nachrichten anzeigen
Um das Datum und die Uhrzeit des Ereignisses anzuzeigen, geben Sie die Formatzeichenfolge ein%(asctime)
import logging
logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('is when this event was logged.')
2022-09-20 14:49:48,927 is when this event was logged.
Ändern Sie das Datumsformat und übergeben Sie Parameterdatefmt
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')
09/20/2022 02:50:34 PM is when this event was logged.
Das Obige ist ein grundlegendes logging
Tutorial, das für eine einfache Verwendung und Bedienung ausreicht. Wenn Sie fortgeschrittenere Tutorials benötigen, lesen Sie bitte das Logging Cookbook