Hintergrund
Ich habe einem neuen Projekt eine Protokollierungsfunktion hinzugefügt und wollte selbst eine schreiben, aber zufällig habe ich über Google entdeckt, dass Python über ein sehr leistungsfähiges integriertes Protokollmodul verfügt: logging . Nach einiger grober Recherche sind hier einige meiner Notizen.
Warum Protokolle verwenden?
Verfolgen Sie einige laufende Informationen des Programms, um den Zweck zu erreichen, immer den laufenden Status des Programms zu verstehen, Programmausnahmen schnell zu erkennen und Programmfehler umgehend zu entdecken
Einführung in das Protokollierungsmodul
Ab Python 2.3 hat die Standardbibliothek von Python das Protokollierungsmodul hinzugefügt. Das Protokollierungsmodul bietet eine Standard-Informationsausgabeschnittstelle für laufende Anwendungen. Die typische Implementierung des Protokollierungsmechanismus besteht darin, die Daten einfach auszugeben Die Methode zum Schreiben einer Protokolldatei ist eine gängige Methode zur Protokollierung, und das Protokollierungsmodul bietet mehr. Es kann die Ausgabeinformationen an alle dateiähnlichen Objekte ausgeben, sogar an TCP- und UDP-Sockets, E-Mail-Server und Unix-Syslog System, Ereignisprotokollsystem der NT-Serie, Speicherpuffer und HTTP-Server und natürlich „echte“ Dateien
Einführung in das Protokollierungsmodul:
import logging #import logging module #使用logging模块: class CLog: #---------------------------------------------------------------------------- def __init__(self): self.logger = logging.getLogger() fileHandler = logging.FileHandler(LOG_FILE_PATH) formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') fileHandler.setFormatter(formatHandler) self.logger.addHandler(fileHandler) self.logger.setLevel(logging.NOTSET) #---------------------------------------------------------------------------- def DebugMessage(self,msg): self.logger.debug(msg) pass oCLog = CLog()
Ein einfaches Protokollmodul ist oben definiert. Ich möchte diesen einfachen Code verwenden, um das Protokollierungsmodul zu beschreiben
logger
Holen Sie sich eine Protokollinstanz, dieser Teil Die Codetrennung ist sehr gut Sie können die Eigenschaften der Protokollinstanz bereichern Hinzufügen verschiedener Handler.
FileHandler
gibt an, dass das Ausgabeende des Protokolls eine Datei ist, und die Ausgabe wird durch Übergabe des Dateipfads angegeben, für den wir andere Ausgabeterminals definieren können Protokolle wie StreamHandler und verschiedene andere komplexe Ausgabemethoden sind wahrscheinlich die am häufigsten verwendeten Methoden. Andere Methoden müssen langsam erforscht werden.
FormatHandler
FomartHandler gibt das Ausgabeformat von FileHandler an. Ich verwende zum Beispiel das folgende Format: ('%(asctime)s %(levelname)s: %(message)s'), dann ist das Ausgabetextformat:
2013-07-25 08: 20:01,525 INFO: goodbye [127.0.0.1]:60442
Formatschlüsselwörter wie Asctime, Levelname finden Sie im offiziellen Dokument zu LogRecord-Attributen
Level
Das Protokollierungsmodul definiert die Priorität von 5 Arten von Protokollinformationen
EbeneWenn es verwendet wird
DEBUGDetaillierte Informationen, die normalerweise nur bei der Diagnose von Problemen von Interesse sind.
INFOBestätigung der Dinge funktionieren wie erwartet.
WARNUNG Ein Hinweis darauf, dass etwas Unerwartetes passiert ist oder dass in naher Zukunft ein Problem vorliegt (z. B. „wenig Speicherplatz“). Die Software funktioniert immer noch wie erwartet FEHLERAufgrund eines schwerwiegenderen Problems konnte die Software einige Funktionen nicht ausführen.
KRITISCHEin schwerwiegender Fehler, der darauf hinweist, dass das Programm selbst möglicherweise nicht weiter ausgeführt werden kann.
Prioritätsbeziehung:
DEBUG
kann anhand von Funktionen wie self.logger.debug(msg), self.logger.info(msg) usw. ermittelt werden. Bestimmen Sie die Priorität der Ausgabeinformationen
SetLevel
Die SetLevel-Funktion definiert die Priorität der Protokollinstanz für die Verarbeitung von Protokollinformationen. Wenn die definierte Priorität „Info“ ist, werden alle Debug-Informationen ignoriert Geben Sie am Ausgabeterminal nur die eingestellte Priorität und Informationen über der eingestellten Priorität ein