Wie man Logging in Python effektiv zur Fehlersuche einsetzt

Lupe bei der Fehlersuche

Bei der Fehlersuche gibt es eine Reihe von Ansätzen: Manche arbeiten mit Breakpoints, andere mit print-Statements im Code und wiederum andere mit Logging. Meist ist eine Kombination aus allen dreien ein guter Ansatz, um schnell zu einem Ergebnis zu Gelagen. Hier sehen wir uns den dritten der hier genannten Ansätze näher an: Logging in Python

In Python gibt es dafür das „logging“-Modul, das es Entwicklern ermöglicht, Nachrichten in unterschiedlichen Schweregraden (z.B. debug, info, warning, error) aufzuzeichnen. Hier ist ein einfaches Beispiel dafür, wie man es verwendet:

import logging

#basic config
logging.basicConfig(level=logging.DEBUG)

logging.debug("This is a debug message.")
logging.info("This is an info message.")
logging.warning("This is a warning message.")
logging.error("This is an error message.")

In diesem Beispiel werden Nachrichten mit dem Schweregrad „debug“, „info“, „warning“ und „error“ aufgezeichnet. Sie können die Schweregrade nach Bedarf anpassen und auch bestimmte Nachrichten an bestimmte Ausgaben (z.B. Datei, Stream) umleiten.

Es gibt viele weitere Konfigurationsoptionen und Möglichkeiten, das logging-Modul zu nutzen. Weitere Informationen findet man in der Dokumentation unter: https://docs.python.org/3/library/logging.html

Drei Konfigurationsoptionen und Möglichkeiten

Zu den drei häufigsten Konfigurationsoptionen und Möglichkeiten, das logging-Modul in Python zu nutzen gehören:

  • Level-Einstellungen: Mit dem basicConfig()-Methodenaufruf kann man den minimalen Schweregrad festlegen, der aufgezeichnet werden soll. Beispielsweise kann man mit logging.basicConfig(level=logging.DEBUG) festlegen, dass alle Nachrichten mit dem Schweregrad „debug“ und höher aufgezeichnet werden sollen.
  • Ausgabeumleitung: Die Ausgabe von Protokollnachrichten an eine Datei, einen Stream oder eine bestimmte Anwendung umzuleiten, ist eine hilfreiche Möglichkeit. Das lässt sich erreichen, indem man die filename, filemode, stream oder handlers-Optionen in basicConfig() angibt. Beispielsweise kann man mit logging.basicConfig(filename='application.log', filemode='w') festlegen, dass die Protokollnachrichten in eine Datei namens „application.log“ im „write“-Modus geschrieben werden.
  • Formatieren: Mit dem basicConfig()-Methodenaufruf lässt sich das Format der aufgezeichneten Nachrichten anpassen, indem man die format-Option angibt. Beispielsweise kann man mit logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') festlegen, dass das Datum und die Uhrzeit sowie der Schweregrad und die Nachricht in der Protokollausgabe enthalten sein sollen.

Foto von Agence Olloweb auf Unsplash