Python Logging Modul: Anleitung & Praktische Beispiele

1. Was ist das Python-Modul logging?

Das Python-Modul logging ist ein Standardwerkzeug zur Aufzeichnung von Programmstatus und Fehlerinformationen, das für Debugging und Betriebsüberwachung verwendet wird. Der Unterschied zu print-Statements besteht darin, dass das logging-Modul multifunktional ist und eine detaillierte Steuerung von Log-Leveln, Ausgabezielen und Formaten ermöglicht. Dies ermöglicht es Entwicklern, Anomalien und den Zustand des Programms effizient zu erfassen.

Arten und Verwendungszwecke von Log-Leveln

     

  • DEBUG: Detaillierte Debugging-Informationen. Wird hauptsächlich während der Entwicklung verwendet.
  •  

  • INFO: Allgemeine Betriebsinformationen. Wird zur Überprüfung des normalen Betriebs verwendet.
  •  

  • WARNING: Kleinere Probleme oder Hinweise. Beeinflusst nicht die Programmausführung, weist aber auf potenzielle Probleme hin.
  •  

  • ERROR: Fehlermeldungen, wenn einige Funktionen nicht normal funktionieren. Zeigt Situationen, die die Programmausführung behindern.
  •  

  • CRITICAL: Schwerwiegende Fehler. Zeigt fatale Probleme, bei denen die gesamte Programmausführung nicht fortgesetzt werden kann.

Durch die richtige Verwendung der einzelnen Log-Level kann die Qualität der aus den Logs gewonnenen Informationen verbessert und ein effizientes Debugging und Monitoring ermöglicht werden.

2. Grundlegende Verwendung von logging

Sehen wir uns die grundlegende Methode zur Ausgabe von Logs mit dem logging-Modul an.

import logging

# Log-Level und Format einstellen
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# Log-Ausgabe für jedes Level
logging.debug('Debug-Information: Detaillierte Diagnoseinformationen')
logging.info('Info-Nachricht: Überprüfung des normalen Betriebs')
logging.warning('Warnmeldung: Zustand, der Aufmerksamkeit erfordert')
logging.error('Fehlermeldung: Ein Problem ist aufgetreten')
logging.critical('Kritische Nachricht: Systemstopp')

Mit logging.basicConfig() werden das Ausgabeziel für Logs (standardmäßig die Standardausgabe), das Log-Level und das Format eingestellt. Im obigen Beispiel werden durch die Einstellung level=logging.DEBUG alle Logs auf DEBUG-Level oder höher ausgegeben.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Anpassen des Log-Ausgabeziels und -Formats

Es ist auch möglich, das Standard-Ausgabeziel zu ändern oder das Log-Format anzupassen. Um Logs beispielsweise in eine Datei auszugeben, verwenden Sie FileHandler.

Ausgabe in eine Datei und Format

import logging

# File-Handler einstellen
file_handler = logging.FileHandler('app.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

# Logger einstellen
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)

# Log-Ausgabe
logger.debug('Debug-Informationen in Datei')
logger.info('Info-Nachrichten in Datei')

Im obigen Code wird mit FileHandler das Log in app.log ausgegeben. Basierend auf dem mit Formatter angegebenen Format werden die Log-Nachrichten geschrieben.

4. Log-Dateirotation

Bei längerem Betrieb ist die Dateirotation wichtig, damit die Log-Datei nicht zu groß wird. Mit RotatingFileHandler können Sie die Größe und Anzahl der Log-Dateien steuern.

Beispiel für die Verwendung von RotatingFileHandler

import logging
from logging.handlers import RotatingFileHandler

# Rotation-Handler einstellen
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# Logger einstellen
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

# Log-Ausgabe
for i in range(100):
    logger.debug(f'Rotationstest {i}')

In diesem Code wird mit maxBytes die maximale Größe der Log-Datei auf 5000 Bytes und mit backupCount die Anzahl der Backup-Dateien auf 3 eingestellt. Wenn die Log-Datei die angegebene Größe überschreitet, wird das Log in eine neue Datei geschrieben und die alte Datei gesichert.

年収訴求

5. Dateiausgabe pro Log-Level

Durch die Ausgabe von Logs unterschiedlicher Level in verschiedene Dateien kann die Lesbarkeit und Analyseffizienz der Logs verbessert werden. Dazu werden benutzerdefinierte Filter und mehrere FileHandler verwendet.

Beispiel für die Dateiausgabe pro Log-Level

import logging

class ErrorFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.ERROR

# Logs auf ERROR-Level in separate Datei ausgeben
error_handler = logging.FileHandler('error.log')
error_handler.setLevel(logging.ERROR)
error_handler.addFilter(ErrorFilter())
error_handler.setFormatter(formatter)

# Logger einstellen
logger.addHandler(error_handler)

# Log-Ausgabe
logger.error('Logs auf ERROR-Level werden in die Datei ausgegeben')

In diesem Beispiel wird eine Klasse ErrorFilter erstellt, um nur Logs auf ERROR-Level zu filtern und sie in error.log auszugeben. Dadurch können Fehlerlogs separat in einer anderen Datei aufgezeichnet werden.

6. Best Practices und Hinweise

Um Logs angemessen zu nutzen, sollten die folgenden Best Practices und Hinweise berücksichtigt werden.

Angemessene Verwendung der Log-Level

     

  • Während der Entwicklung nutzen Sie das DEBUG-Level zur Aufzeichnung detaillierter Informationen und wechseln im Betrieb zu INFO oder WARNING, um nur wichtige Informationen zu protokollieren.
  •  

  • Übermäßige Log-Ausgabe kann die Leistung beeinträchtigen, daher sollten nur notwendige Informationen aufgezeichnet werden.

Sicherheit und Datenschutz von Logs

     

  • Achten Sie darauf, keine persönlichen oder vertraulichen Informationen in Logs zu protokollieren. Gegebenenfalls sind Maßnahmen wie das Maskieren von Daten erforderlich.
  •  

  • Log-Dateien sollten mit angemessenen Berechtigungen versehen werden, um unbefugten Zugriff zu verhindern.

7. Zusammenfassung

Das logging-Modul ist sehr nützlich, um den Status der Programmausführung effizient aufzuzeichnen und beim Debugging und Betrieb zu helfen. Durch die angemessene Einstellung von Log-Level, Ausgabeziel, Format und Rotation sowie durch die detaillierte Erfassung des Programmstatus können Probleme frühzeitig erkannt und behoben werden. Nutzen Sie Best Practices und praktizieren Sie ein angemessenes Log-Management.

侍エンジニア塾