Freitag, 13. Mai 2016

Python logging modul Beispiel

Bei Python ist auch ein recht umfangreiches Logging Modul enthalten. Hier möchte ich ein einfaches Beispiel aufführen, wie dieses verwendet werden kann. Die sehr ausführliche Dokumentation zum Thema Python und Logging kann unter folgender SeitePython Logging How to nachgelesen werden.

Das Logging Modul ist sehr mächtig und bietet eine vielzahl von Konfigurationsmöglichkeiten. Ich beschränke mich hier nur auf ein grundlegendes Beispiel. Um das Logging Modul zu verwenden, muss dieses Eingebunden werden und eine initiale Konfiguration angelegt werden.

import logging
# Festlegung des Lognames, z.b. Name der Applikation
logger = logging.getLogger('example_logger')
# Festlegung des Loglevels
logger.setLevel(logging.DEBUG)

Zwei der am häufigsten verwendeten Logging Ausgaben sind das Loggen auf die Konsole und in ein Logfile. Für diese Umsetzung muss ein entsprechender Logging Handler erzeugt und hinzugefügt werden.

# Für das Loggen auf die Konsole wird ein StreamHandler benötigt
ch = logging.StreamHandler()
# Für das Loggen in eine Datei wird wiederum ein FileHandler benötigt
fh = logging.FileHandler("example.log")

Wie bei der initialen Konfiguration bereits angegeben, unterstützt das Logging Modul verschiedene Logging Level. Diese haben hinsichtlich ihres Schweregrads folgende, aufsteigende Abstufung. - DEBUG - INFO - WARNING - ERROR - CRITICAL

Das Logging Modul bietet die Möglichkeit für jeden Logging Handler ein separates Level festzulegen. Dadurch erfolgt eine Filterung der Logs, bezüglich ihrer Ausgabe, bezogen auf das Logging Medium

# Auf der Konsole werden nur Logs mit Level INFO oder höher ausgegeben
ch.setLevel(logging.INFO)
# In das Logfile werden auch die Debug Logs geschrieben
fh.setLevel(logging.DEBUG)

Neben dem Loglevel kann auch das Logformat festgelegt werden. Für dieses Beispiel ist jeder Logeintrag wie folgt aufgebaut: "Zeitpunkt [Loglevel] Logname: Lognachricht"

formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(name)s: %(message)s')
# Die Formatierung muss noch den Handlern zugewiesen werden
ch.setFormatter(formatter)
fh.setFormatter(formatter)

Im letzten Schritt müssen die konfigurierten Logging Handler noch dem Logger hinzugefügt werden. Anschließend kann über den Loger in die Datei und auf die Konsole geloggt werden.

# add both handler to logger
logger.addHandler(ch)
logger.addHandler(fh)
#start logging, only in the logfile
logger.debug("start")

Hier noch einige Beispiele mit der zugehörigen Ausgabe:

#this will be printed on the console and to the logfile
self.logger.critical("This is a critical message")
#this will be printed on the console and to the logfile
self.logger.error("This is an error message")
#this will be printed on the console and to the logfile
self.logger.warning("This is a warning message")
#this will be printed on the console and to the logfile
self.logger.info("This is an info message")
#this will be printed only on the console
self.logger.debug("This is a debug message")
$cat example.log
2016-05-13 20:26:52,497 [DEBUG]: example_logger: start
2016-05-13 20:26:52,497 [CRITICAL]: example_logger: This is a fatal message
2016-05-13 20:26:52,497 [ERROR]: example_logger: This is an error message
2016-05-13 20:26:52,498 [WARNING]: example_logger: This is a warning message
2016-05-13 20:26:52,498 [INFO]: example_logger: This is an info message
2016-05-13 20:26:52,498 [DEBUG]: example_logger: This is a debug message

Den Code zu diesem Beispiel gibt es in meinem github Repository.

Keine Kommentare:

Kommentar veröffentlichen