Anmelden in Python

Anmelden in Python

Die Protokollierung ist eine Möglichkeit, Ereignisse zu verfolgen, die bei der Ausführung bestimmter Software auftreten. Die Protokollierung ist wichtig für die Entwicklung, das Debuggen und die Ausführung von Software. Wenn Sie über keine Protokolldatensätze verfügen und Ihr Programm abstürzt, ist die Wahrscheinlichkeit, dass Sie die Ursache des Problems erkennen, sehr gering. Und wenn Sie die Ursache erkennen, wird es viel Zeit in Anspruch nehmen. Mit der Protokollierung können Sie eine Spur aus Brotkrümeln hinterlassen, sodass wir im Falle eines Fehlers die Ursache des Problems ermitteln können.

Es gibt eine Reihe von Situationen, z. B. wenn Sie eine Ganzzahl erwarten, Ihnen eine Gleitkommazahl gegeben wurde und Sie eine Wolke können API , der Dienst ist wegen Wartungsarbeiten nicht verfügbar und vieles mehr. Solche Probleme sind außer Kontrolle und schwer zu bestimmen.

Warum die Druckanweisung nicht pythonisch ist

Einige Entwickler verwenden das Konzept des Druckens der Anweisungen, um zu überprüfen, ob die Anweisungen korrekt ausgeführt wurden oder ob ein Fehler aufgetreten ist. Aber Drucken ist keine gute Idee. Es kann Ihre Probleme bei einfachen Skripten lösen, bei komplexen Skripten schlägt der Druckansatz jedoch fehl.
Python verfügt über ein integriertes Modul Protokollierung Dies ermöglicht das Schreiben von Statusmeldungen in eine Datei oder andere Ausgabeströme. Die Datei kann Informationen darüber enthalten, welcher Teil des Codes ausgeführt wird und welche Probleme aufgetreten sind.



Python-Protokollierungsstufen

Es gibt fünf integrierte Ebenen der Protokollmeldung.

  • Debuggen: Diese werden verwendet, um detaillierte Informationen bereitzustellen, die normalerweise nur bei der Diagnose von Problemen von Interesse sind.
  • Die Info: Diese werden verwendet, um zu bestätigen, dass die Dinge wie erwartet funktionieren
  • Warnung: Diese werden als Hinweis darauf verwendet, dass etwas Unerwartetes passiert ist, oder weisen auf ein Problem in der nahen Zukunft hin
  • Fehler: Dies weist darauf hin, dass die Software aufgrund eines schwerwiegenderen Problems einige Funktionen nicht ausführen konnte
  • Kritisch: Dies weist auf einen schwerwiegenden Fehler hin, der darauf hinweist, dass das Programm selbst möglicherweise nicht weiter ausgeführt werden kann

Bei Bedarf haben Entwickler die Möglichkeit, weitere Level zu erstellen, diese reichen jedoch aus, um jede mögliche Situation zu bewältigen. Jeder integrierten Ebene wurde ihr numerischer Wert zugewiesen.

Das Protokollierungsmodul ist mit mehreren Funktionen ausgestattet. Es verfügt über mehrere Konstanten, Klassen und Methoden. Die Elemente mit Großbuchstaben sind Konstanten, die großgeschriebenen Elemente sind Klassen und die Elemente, die mit Kleinbuchstaben beginnen, sind Methoden.

Der Basis-Handler selbst bietet mehrere Logger-Objekte an.

  • Logger.info(msg): Dadurch wird eine Nachricht mit der Ebene INFO auf diesem Logger protokolliert.
  • Logger.warning(msg): Dadurch wird eine Meldung mit der Stufe WARNING auf diesem Logger protokolliert.
  • Logger.error(msg): Dadurch wird eine Meldung mit der Stufe ERROR auf diesem Logger protokolliert.
  • Logger.critical(msg): Dadurch wird eine Nachricht mit der Stufe KRITISCH auf diesem Logger protokolliert.
  • Logger.log(lvl,msg): Dadurch wird eine Nachricht mit der Ganzzahlebene auf diesem Logger protokolliert.
  • Logger.Exception(msg): Dadurch wird eine Meldung mit der Stufe ERROR auf diesem Logger protokolliert.
  • Logger.setLevel(lvl): Diese Funktion setzt den Schwellenwert dieses Loggers auf lvl. Dies bedeutet, dass alle Nachrichten unterhalb dieser Ebene ignoriert werden.
  • Logger.addFilter(filt): Dadurch wird diesem Logger ein spezieller Filter hinzugefügt.
  • Logger.removeFilter(filt): Dadurch wird ein bestimmter Filter entfernt, der in diesen Logger passt.
  • Logger.filter(Datensatz): Diese Methode wendet den Filter des Loggers auf den bereitgestellten Datensatz an und gibt „True“ zurück, wenn der Datensatz verarbeitet werden soll. Andernfalls wird False zurückgegeben.
  • Logger.addHandler(hdlr): Dadurch wird diesem Logger ein bestimmter Handler hdlr hinzugefügt.
  • Logger.removeHandler(hdlr) : Dadurch wird ein bestimmter Handler hdlr in diesen Logger entfernt.
  • Logger.hasHandlers(): Dadurch wird überprüft, ob für den Logger ein Handler konfiguriert ist oder nicht.

Nützliche Handler

Zusätzlich zur Basis-Handler-Klasse werden viele nützliche Unterklassen bereitgestellt.

Handler

Beschreibung

StreamHandler Sendet Nachrichten an Streams (dateiähnliche Objekte).
FileHandler Sendet Nachrichten an Festplattendateien.
BaseRotatingHandler Basisklasse für Handler, die Protokolldateien an einem bestimmten Punkt rotieren. Verwenden RotatingFileHandler oder TimedRotatingFileHandler stattdessen.
RotatingFileHandler Sendet Nachrichten an Festplattendateien, mit Unterstützung für maximale Protokolldateigrößen und Protokolldateirotation.
TimedRotatingFileHandler Sendet Nachrichten an Festplattendateien und rotiert die Protokolldatei in bestimmten Zeitintervallen.
SocketHandler Sendet Nachrichten an TCP/IP-Sockets. Unterstützt seit Python 3.4 auch Unix-Domain-Sockets.
DatagramHandler Sendet Nachrichten an UDP-Sockets. Unterstützt seit Python 3.4 auch Unix-Domain-Sockets.
SMTPHandler Sendet Nachrichten an eine angegebene E-Mail-Adresse.
SysLogHandler Sendet Nachrichten an einen Unix-Syslogthe-Daemon, möglicherweise auf einem Remote-Computer.
NTEventLogHandler Sendet Nachrichten an ein Windows NT/2000/XP-Ereignisprotokoll.
MemoryHandler Sendet Nachrichten an einen Puffer im Speicher, der geleert wird, wenn bestimmte Kriterien erfüllt sind.
HTTPHandler Sendet Nachrichten mithilfe der GET- oder POST-Semantik an einen HTTP-Server.
WatchedFileHandler Überwacht die Datei, in der protokolliert wird. Wenn sich die Datei ändert, wird sie geschlossen und unter dem Dateinamen erneut geöffnet.
QueueHandler Sendet Nachrichten an eine Warteschlange, beispielsweise an die in der Warteschlange oder in Multiverarbeitungsmodulen implementierten.
NullHandler Tut nichts mit Fehlermeldungen. Wird von Bibliotheksentwicklern verwendet, um die Meldung „Für den Logger konnten keine Handler gefunden werden“ zu vermeiden.

Grundlagen der Python-Protokollierung

Die Grundlagen der Verwendung des Protokollierungsmoduls zum Aufzeichnen der Ereignisse in einer Datei sind sehr einfach. Importieren Sie dazu einfach das Modul aus der Bibliothek.

  1. Erstellen und konfigurieren Sie den Logger. Es kann mehrere Parameter haben. Wichtig ist jedoch, dass Sie den Namen der Datei übergeben, in der Sie die Ereignisse aufzeichnen möchten.
  2. Hier kann auch das Format des Loggers eingestellt werden. Standardmäßig funktioniert die Datei in anhängen Modus, aber wir können ihn bei Bedarf in den Schreibmodus ändern.
  3. Außerdem kann die Ebene des Loggers festgelegt werden, die als Schwellenwert für die Verfolgung auf der Grundlage der jeder Ebene zugewiesenen numerischen Werte dient.
    Es gibt mehrere Attribute, die als Parameter übergeben werden können.
  4. Die Liste aller dieser Parameter finden Sie in Python-Bibliothek . Der Benutzer kann das erforderliche Attribut entsprechend der Anforderung auswählen.
    Erstellen Sie anschließend ein Objekt und verwenden Sie die verschiedenen Methoden, wie im Beispiel gezeigt.

Protokollieren einer Variablen

Dieser Code zeigt, wie eine Fehlermeldung protokolliert wird. Die Funktion logging.error() wird verwendet, um eine Fehlermeldung mit einem Platzhalter %s für den Variablennamen zu protokollieren.

Python3




import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)>

Ausgabe :

ERROR:root:GFG raised an error 

Protokollierung aller Ebenen

Dieser Code demonstriert alle Protokollierungsebenen.

Python




# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename> => 'newfile.log'> ,> > format> => '%(asctime)s %(message)s'> ,> > filemode> => 'w'> )> # Creating an object> logger> => logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(> 'Harmless debug Message'> )> logger.info(> 'Just an information'> )> logger.warning(> 'Its a Warning'> )> logger.error(> 'Did you try to divide by zero'> )> logger.critical(> 'Internet is down'> )>

Der obige Code generiert eine Datei mit dem angegebenen Namen. Wenn wir die Datei öffnen, enthält die Datei die folgenden Daten.

Grundlagen der Python-Protokollierung

Protokollierung konfigurieren

Protokollierung in eine Datei: temp.conf

[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler] 

Beispiel:

Der Code richtet ein Protokollierungssystem unter Verwendung der Konfiguration aus ein temp.conf Datei. Es erhält einen Logger mit dem Namen einfaches Beispiel und protokolliert Nachrichten mit verschiedenen Protokollierungsstufen.

Python3




import> logging> import> logging.config> logging.config.fileConfig(> 'temp.conf'> )> # create logger> logger> => logging.getLogger(> 'simpleExample'> )> # 'application' code> logger.debug(> 'debug message'> )> logger.info(> 'info message'> )> logger.warning(> 'warn message'> )> logger.error(> 'error message'> )> logger.critical(> 'critical message'> )>

Ausgabe :

2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message 

Python-Protokollierungsausnahme

Das Auslösen von Ausnahmen während der Protokollierung kann in bestimmten Szenarien nützlich sein, um auf außergewöhnliche Bedingungen oder Fehler in Ihrer Anwendung hinzuweisen. Durch das Auslösen einer Ausnahme können Sie den normalen Ausführungsfluss anhalten und den Aufrufer oder das Protokollierungssystem über das aufgetretene Problem benachrichtigen.

In diesem Code lösen wir eine Ausnahme aus, die von der Protokollierung abgefangen wird. Ausnahme.

Python3




import> logging> logging.basicConfig(level> => logging.DEBUG,> > format> => '%(asctime)s - %(levelname)s - %(message)s'> )> def> perform_operation(value):> > if> value <> 0> :> > raise> ValueError(> 'Invalid value: Value cannot be negative.'> )> > else> :> > # Continue with normal execution> > logging.info(> 'Operation performed successfully.'> )> try> :> > input_value> => int> (> input> (> 'Enter a value: '> ))> > perform_operation(input_value)> except> ValueError as ve:> > logging.exception(> 'Exception occurred: %s'> ,> str> (ve))>

Ausgabe :

Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative. 


Das Könnte Ihnen Gefallen

Top Artikel

Kategorie

Interessante Artikel