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.
- 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.
- 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.
- 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. - 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.
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.