Legen Sie Protokollierungsebenen mit setLevel() in Python fest

Namita Chaudhary 21 Juni 2023
  1. Funktion zum Anmelden eines Programms in Python
  2. Ebenen von Protokollmeldungen in Python
  3. Legen Sie die Protokollierungsebenen mit der Funktion setLevel() im Python-Protokollierungsmodul fest
  4. Protokollierungshandler in Python
  5. Abschluss
Legen Sie Protokollierungsebenen mit setLevel() in Python fest

Die Protokollierung ist ein sehr effizientes Werkzeug im Leben eines jeden Programmierers. Dadurch verstehen wir nicht nur den Ablauf des Programms besser, sondern auch die Möglichkeiten von Fehlern, die während der Ausführung des Programms auftreten können.

Python bietet als Teil seiner Standardbibliothek ein separates logging-Modul an, um das Logging zu vereinfachen. Dieser Artikel behandelt das Logging setLevel und wie es in Python funktioniert.

Funktion zum Anmelden eines Programms in Python

Die Protokollierung ist ein Prozess, um den Ablauf des Programms nachzuverfolgen, wenn die Software ausgeführt wird. Wenn Sie jedoch keine Anmeldung bei Ihrem Programm implementieren, ist es bei jedem Absturz des Programms schwierig, die Ursache des aufgetretenen Problems zu finden.

Mit der in Ihrem Programm implementierten Protokollierung können Sie die Ursache des Problems leicht finden und es im Handumdrehen lösen. Es ist sehr nützlich beim Debuggen und Entwickeln von Software.

Manchmal verwenden Leute die print-Anweisung, um die Probleme in der Software zu finden. Das Drucken kann die Probleme bei einfachen Skripten lösen, aber es ist keine gute Option für größere und komplexere Software.

Python stellt aus seiner Standardbibliothek ein eingebautes Modul namens logging zur Verfügung, das Statusmeldungen in einen beliebigen Ausgabestrom oder eine Datei darüber schreibt, welcher Teil des Programms läuft und welche Probleme verursacht wurden.

Ebenen von Protokollmeldungen in Python

Das logging-Modul in Python hat je nach Wichtigkeit unterschiedliche Status-/Log-Meldungsebenen. Daher sagt Ihnen die Ebene einer Protokollnachricht, wie wichtig diese Protokollnachricht ist.

Die verschiedenen Ebenen der Protokollmeldungen sind wie folgt: DEBUG, INFO, WARNING, ERROR und CRITICAL, wobei CRITICAL die größte Bedeutung hat.

Protokollebene Beschreibung
DEBUG Es wird für Debugging-Zwecke in der Software verwendet. Gibt normalerweise detaillierte Informationen, wenn ein Problem auftritt.
INFO Es stellt sicher, dass in einem Programm alles funktioniert.
WARNING Es wird verwendet, um anzuzeigen, dass ein Problem in der Zukunft auftreten könnte und gelöst werden sollte, um zukünftige Probleme zu vermeiden.
ERROR Es wird verwendet, um anzuzeigen, dass die Software aufgrund eines schwerwiegenden Problems eine bestimmte Funktion nicht ausführen konnte.
CRITICAL Diese Ebene weist auf ein schwerwiegendes Problem hin, das zum Stoppen der Software führt.

Alle diese Ebenen werden für den Handler oder Protokollierer festgelegt, damit geeignete Meldungen zu geeigneten Zeiten angezeigt werden können, wenn der Fehler auftritt. Die Protokollierungsstufen sind oben anhand ihrer Wichtigkeit erläutert, wobei die erste die unwichtigste und die letzte (Stufe KRITISCH) die wichtigste ist.

Legen Sie die Protokollierungsebenen mit der Funktion setLevel() im Python-Protokollierungsmodul fest

Die Funktion setLevel(level) wird verwendet, um den Schwellenwert für einen Logger auf das angegebene Niveau zu setzen. Die weniger schwerwiegenden Protokollierungsmeldungen als die angegebene Stufe werden ignoriert, während die Meldungen mit höherem Schweregrad von dem entsprechenden Handler ausgegeben werden, der die Protokollierung bedient.

Die Anmeldung in Python hat ein Konzept einer effektiven Ebene. Beim Anlegen eines Loggers wird dieser zunächst auf die Stufe NOTSET gesetzt.

Dieses NOTSET ist jedoch nicht das wirksame Niveau. Das effektive Level ist dasjenige, das explizit mit Hilfe von setLevel(level) gesetzt wurde.

Wenn ein Logger erstellt wird und sein Level nicht explizit gesetzt ist, dann wird das Level seines übergeordneten Loggers untersucht, um einen effektiven Level für den Logger zu erhalten, der explizit unter Verwendung von setLevel(level) gesetzt worden wäre. Wenn der Eltern-Logger ebenfalls nicht auf einen effektiven Pegel gesetzt wurde, dann wird sein Eltern-Logger überprüft.

Der Prozess wird fortgesetzt, bis ein anderer Pegel als NOTSET gefunden oder die Wurzel erreicht wird. Der Root-Logger ist standardmäßig auf WARNING eingestellt; daher würde in solchen Fällen der Standardpegel des Stamms als der effektive Pegel angesehen.

Sehen wir uns nun die Verwendung von setLevel(level) anhand einiger Codebeispiele an.

import logging

logging.debug("Debug message")
logging.info("Info message")
logging.warning("Warning message")
logging.error("Error message")
logging.critical("Critical message")

Ausgang:

WARNING:root:Warning message
ERROR:root:Error message
CRITICAL:root:Critical message

Wie in der obigen Ausgabe zu sehen ist, werden nur die Meldungen WARNING, ERROR und CRITICAL gedruckt, da die Standardstufe WARNING des Root-Loggers als effektive Stufe betrachtet wurde, da kein anderer Logger oder dessen übergeordneter Logger angegeben ist. Daher werden alle Meldungen ab der Stufe WARNUNG gedruckt und die weniger wichtigen ignoriert.

Sehen wir uns ein Beispiel an, bei dem der Logger die effektive Ebene als die übergeordnete Ebene betrachtet.

import logging

parent_logger = logging.getLogger("parent")
parent_logger.setLevel(4)

child_logger = logging.getLogger("parent.child")

print(parent_logger.getEffectiveLevel())
print(child_logger.getEffectiveLevel())

Ausgang:

4
4

Wie Sie sehen können, wurde child_logger nicht auf eine effektive Ebene gesetzt, daher wird die Ebene von parent_logger als effektive Ebene verwendet.

Protokollierungshandler in Python

Handler in Python sind Objekte, die für das Protokollieren geeigneter Protokollnachrichten am angegebenen Ziel des Handlers verantwortlich sind. diese Handler funktionieren auch wie Logger. Wenn für einen Logger kein Handler festgelegt ist, werden seine Vorfahren nach einem Handler durchsucht.

Sehen wir uns nun die Verwendung von Handlern bei der Protokollierung an:

import logging

logger = logging.getLogger("example")
logger.setLevel(logging.INFO)

fileHandler = logging.FileHandler("p1.log")
fileHandler.setLevel(logging.INFO)

chl = logging.StreamHandler()
chl.setLevel(logging.INFO)

logger.addHandler(fileHandler)
logger.addHandler(chl)

logger.info("Information")

Ausgang:

Information

Wir haben im obigen Code zwei Handler erstellt: fileHandler und chl. Der fileHandler sendet die Datensätze an die Datei p1.log und der Handler chl sendet die Datensätze an den Stream.

Wenn der Stream jedoch nicht angegeben ist, wird sys.stderr verwendet. Am Ende werden die Handler mit dem addHandler zum Logger hinzugefügt.

Jetzt müssen Sie sich fragen, warum wir das Level zweimal gesetzt haben: einmal für den Logger und das andere für die Handler. Sie können das setLevel() auf den Handlern entfernen, wodurch die gesamte Level-Filterung der Nachrichten dem Logger überlassen wird.

Wenn Sie jedoch die Ebene für die Handler und den Logger festlegen, ergibt sich ein anderes Szenario. Der Logger ist der erste, der die Meldungen basierend auf dem Level filtert; Wenn Sie also den Logger auf WARNING, INFO oder eine höhere Stufe und den Handler auf DEBUG setzen, erhalten Sie keine DEBUG-Protokollmeldung, da der Logger sie zunächst ignoriert.

Wenn Sie den Logger auf DEBUG und die Handler auf eine höhere Ebene wie z. B. INFO einstellen, erhalten Sie ebenfalls keine DEBUG-Meldungen, da die Handler sie ablehnen. Der Handler lehnt es ab, auch wenn der Logger es genehmigt (da INFO > DEBUG).

Daher sollte man beim Einstellen der Pegel für den Logger und die Handler vorsichtig genug sein, um das ordnungsgemäße Funktionieren der Software sicherzustellen.

Abschluss

In diesem Artikel haben wir das Logging setLevel() besprochen und wie es in Python funktioniert.

Die Protokollierung ist ein sehr effizientes Werkzeug, um den Code der Software oder eines Programms zu verwalten, indem der Programmablauf protokolliert und die Möglichkeiten des Fehlers gefunden werden. Für die Protokollierung in Python legen wir je nach Wichtigkeit unterschiedliche Ebenen für verschiedene Protokollmeldungen fest.

Alle diese Ebenen werden mit dem in diesem Artikel ausführlich erläuterten setLevel gesetzt.

Verwandter Artikel - Python Logging