Einführung in die Protokollierung der Python-Protokollierungsbibliothek

Offizielle Website Logging HOWTO

Grundlegendes Protokollierungs-Tutorial

LoggingDie Protokollierung wird verwendet, um Ereignisse zu verfolgen, die während der Ausführung der Software ausgelöst werden. logging callsDem 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?

LoggingStellt 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

loggingDie 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')  # 不会打印出任何信息

INFODie 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 loggingEreignissen 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 levelauf 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 filemodeParameter

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.pyund mylib.pyalle 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 loggingTutorial, das für eine einfache Verwendung und Bedienung ausreicht. Wenn Sie fortgeschrittenere Tutorials benötigen, lesen Sie bitte das Logging Cookbook

Guess you like

Origin blog.csdn.net/weixin_45526117/article/details/126943685