Recherche zum Python-Logging-Modul

高洛峰
Freigeben: 2016-10-19 15:14:54
Original
1233 Leute haben es durchsucht

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()
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage