Python-Logging: Vollständiger Guide von Anfänger bis Praxis

1. Vollständiger Leitfaden zur Protokollierung in Python | Vom Debugging bis zum Betrieb

Bei der Programmentwicklung mit Python ist die „Protokollierung“ zur Identifizierung von Fehlern und zur Überprüfung des Verhaltens äußerst wichtig.

In diesem Artikel erklären wir von den grundlegenden Konzepten bis zu fortgeschrittenen Techniken, damit Python-Anfänger die Protokollierung effektiv nutzen können.

2. Was ist die Protokollierung in Python? Erklärung der Grundkonzepte und der Notwendigkeit

Die Protokollierung ist ein Mechanismus, um Informationen und Fehler, die während der Ausführung des Programms auftreten, zu protokollieren. Durch die angemessene Nutzung von Logs ergeben sich folgende Vorteile.

Vorteile der Protokollierung

  1. Fehleranalyse wird erleichtert
    Sie hilft dabei, den Ort und die Ursache des aufgetretenen Fehlers zu identifizieren.
  2. Das Verhalten des Programms kann nachverfolgt werden
    Es ermöglicht, zu verstehen, welche Teile normal funktionieren und wo Anomalien auftreten.
  3. Überwachung im Betrieb ist möglich
    Es bildet die Grundlage für die kontinuierliche Überwachung des Systemzustands in der Produktionsumgebung.

print() Unterschiede zu

Die print()-Funktion, die Anfänger häufig verwenden, ist für das Debugging bequem, hat jedoch bei der professionellen Entwicklung folgende Einschränkungen:

  • Der Ausgabeziel kann nicht flexibel angegeben werden (z. B. Datei oder externer Service).
  • Log-Level (Unterteilung nach Wichtigkeit) können nicht verwaltet werden.

Durch die Verwendung des standardmäßigen Python-logging-Moduls können diese Herausforderungen gelöst werden.

侍エンジニア塾

3. Erste Schritte zur Log-Ausgabe mit dem Standard-logging-Modul von Python

Python bietet standardmäßig das logging-Modul, mit dem Sie Logs einfach ausgeben können. In diesem Abschnitt erklären wir die grundlegenden Verwendungen.

Übersicht über Log-Level

Im logging-Modul können Sie für die Log-Nachrichten ein „Log-Level“ einstellen, das die Wichtigkeit angibt. Die folgenden sind die wichtigsten Log-Level:

  • DEBUG: Debug-Informationen. Nützlich während der Entwicklung.
  • DEBUG: Debug-Informationen. Nützlich während der Entwicklung.
  • INFO: Informationsnachricht. Zeigt den Fortschritt des Programms an.
  • INFO: Informationsnachricht. Zeigt den Fortschritt des Programms an.
  • WARNING: Warnung. Zeigt potenzielle Probleme an.
  • WARNING: Warnung. Zeigt potenzielle Probleme an.
  • ERROR: Fehler. Zeigt Zustände an, in denen das Programm nicht korrekt funktioniert.
  • ERROR: Fehler. Zeigt Zustände an, in denen das Programm nicht korrekt funktioniert.
  • CRITICAL: Kritischer Fehler. Zeigt Systemabstürze an.
  • CRITICAL: Kritischer Fehler. Zeigt Systemabstürze an.

Grundlegende Verwendung

Hier ist ein einfaches Beispiel für die Log-Ausgabe mit dem logging-Modul.Hier ist ein einfaches Beispiel für die Log-Ausgabe mit dem logging-Modul.

import logging

# Grundlegende Log-Einstellungen
# Grundlegende Log-Einstellungen
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Beispiele für Ausgaben auf verschiedenen Log-Leveln
# Beispiele für Ausgaben auf verschiedenen Log-Leveln
logging.debug('Dies ist eine Debug-Information.')
logging.debug('Dies ist eine Debug-Information.')
logging.info('Dies ist eine Informationsnachricht.')
logging.info('Dies ist eine Informationsnachricht.')
logging.warning('Dies ist eine Warnungsnachricht.')
logging.warning('Dies ist eine Warnungsnachricht.')
logging.error('Dies ist eine Fehlermeldung.')
logging.error('Dies ist eine Fehlermeldung.')
logging.critical('Dies ist eine kritische Fehlermeldung.')
logging.critical('Dies ist eine kritische Fehlermeldung.')

Erklärung des Codes

  • basicConfig: Führt die Einstellungen für die Log-Ausgabe durch. Mit dem level-Argument können Sie das minimale Log-Level für die Ausgabe angeben.
  • basicConfig: Führt die Einstellungen für die Log-Ausgabe durch. Mit dem level-Argument können Sie das minimale Log-Level für die Ausgabe angeben.
  • Formatangabe: Mit dem format-Argument können Sie das Format der Log-Nachrichten anpassen.
  • Formatangabe: Mit dem format-Argument können Sie das Format der Log-Nachrichten anpassen.
  • Beispiel: %(asctime)s steht für den Zeitstempel, %(levelname)s für das Log-Level, %(message)s für den Nachrichteninhalt.
  • Beispiel: %(asctime)s steht für den Zeitstempel, %(levelname)s für das Log-Level, %(message)s für den Nachrichteninhalt.

4. Methode zum Ausgeben von Logs in Dateien oder der Konsole mit Python

Logs können nicht nur auf dem Bildschirm ausgegeben werden, sondern auch in Dateien oder externen Systemen gespeichert werden. In diesem Abschnitt erklären wir, wie man verschiedene Ausgabeziel einrichtet.

Log-Ausgabe in die Konsole

logging-Moduls Standardeinstellung werden Logs in die Konsole ausgegeben.

import logging

logging.basicConfig(level=logging.INFO)
logging.info('Beispiel für Log-Ausgabe in die Konsole')

Log-Ausgabe in eine Datei

Um Logs in eine Datei zu protokollieren, geben Sie das filename-Argument von basicConfig an.

import logging

logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(message)s')
logging.info('Dies ist ein Beispiel für Log-Ausgabe in eine Datei.')

Log-Ausgabe sowohl in Konsole als auch in Datei

Um mehrere Ausgabeziele einzurichten, verwenden Sie die Handler von logging.

import logging

# Erstellung des Loggers
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

# Handler für die Konsole
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# Handler für die Datei
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.INFO)

# Formatierung der Handler einstellen
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)

# Handler zum Logger hinzufügen
logger.addHandler(console_handler)
logger.addHandler(file_handler)

logger.info('Beispiel für Log-Ausgabe in Konsole und Datei.')

5. Effektive Techniken für die Log-Ausgabe in Python-Projekten

Hier stellen wir Best Practices für die Log-Ausgabe vor, die in realen Projekten nützlich sind. Lernen Sie Techniken, um effizient zu debuggen und die Log-Verwaltung zu verbessern.

Konsistente Log-Konfiguration

In großen Projekten ist eine konsistente Log-Konfiguration wichtig. Wenn mehrere Module oder Teammitglieder zusammenarbeiten, erleichtert eine einheitliche Formatierung und Log-Level die Analyse und Fehlerbehebung.

Das folgende ist ein Beispiel für eine konsistente Log-Konfiguration.

import logging

# Gemeinsame Funktion für die Log-Konfiguration
def setup_logger(name, log_file, level=logging.INFO):
    handler = logging.FileHandler(log_file)
    handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)
    return logger

# Erstellung von Loggers für jedes Modul
app_logger = setup_logger('app_logger', 'app.log')
db_logger = setup_logger('db_logger', 'db.log')

# Beispiel für Log-Ausgabe
app_logger.info('Log-Nachricht der Anwendung')
db_logger.error('Fehlermeldung der Datenbank')

Kombination von Fehlerbehandlung und Log-Ausgabe

In der Fehlerbehandlung (Ausnahmebehandlung) können Sie durch angemessene Protokollierung die Details eines Problems schnell erfassen.

Das folgende ist ein Beispiel, bei dem Logs bei Ausnahen protokolliert werden.

import logging

logging.basicConfig(filename='error.log', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    # Code-Beispiel, das einen Fehler verursacht
    1 / 0
except ZeroDivisionError as e:
    logging.error(f'Deine Null-durch-Null-Fehler ist aufgetreten: {e}')

Log-Nachrichten mit Kontextinformationen

Je nach Projektkontext können zusätzliche Kontextinformationen (z. B. Benutzer-ID, Transaktions-ID usw.) in Log-Nachrichten enthalten werden, um detaillierte Analysen zu ermöglichen.

import logging

logging.basicConfig(filename='context.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

user_id = 12345
transaction_id = 'txn_001'

logging.info(f'Benutzer-ID: {user_id}, Transaktions-ID: {transaction_id} - Die Operation war erfolgreich.')

Angemessene Filterung von Logs

Wenn große Mengen an Logs generiert werden, ist es effektiv, Filterung zu nutzen, um nur die notwendigen Logs auszugeben. Das folgende ist ein Beispiel für einen benutzerdefinierten Filter.

import logging

class DebugFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.DEBUG

logger = logging.getLogger('filtered_logger')
handler = logging.StreamHandler()
handler.addFilter(DebugFilter())

logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

logger.debug('Dies ist ein Debug-Log.')
logger.info('Dies wird nicht angezeigt.')

6. Drei empfohlene Bibliotheken zur Verbesserung der Log-Ausgabe in Python

Neben dem standardmäßigenlogging-Modul von Python gibt es auch bequeme Log-Bibliotheken. In diesem Abschnitt stellen wir drei besonders beliebte Bibliotheken vor.

Loguru: Einfache Logging-Bibliothek für Anfänger

Merkmale:

  • Einfache Installation und Konfiguration.
  • Intuitivere Syntax als das Standard-logging.

Installation:

pip install loguru

Grundlegende Verwendung:

from loguru import logger

logger.info('Dies ist eine Log-Ausgabe mit Loguru.')
logger.error('Fehlermeldungen können einfach protokolliert werden.')

Logzero: Leichte und benutzerfreundliche Logging-Bibliothek

Merkmale:

  • Einfach anpassbar.
  • Integrierte Log-Rotationsfunktion.

Installation:

pip install logzero

Grundlegende Verwendung:

from logzero import logger

logger.info('Log-Ausgabe mit Logzero')
logger.warning('Dies ist eine Warnmeldung.')

Structlog: Bibliothek spezialisiert auf strukturierte Logs

Merkmale:

  • JSON-Logs einfach ausgeben.
  • Geeignet für verteilte Systeme und Cloud-Umgebungen.

Installation:

pip install structlog

Grundlegende Verwendung:

import structlog

logger = structlog.get_logger()
logger.info('event', user='12345', action='login')

7. Zweifel zur Log-Ausgabe in Python lösen!

Q1. Was ist die Ursache, wenn keine Logs ausgegeben werden?

Antwort:
Überprüfen Sie, ob das Log-Level angemessen eingestellt ist. Standardmäßig werden möglicherweise nur Logs ab WARNING ausgegeben.

Q2. Was tun, wenn die Log-Datei zu groß wird?

Antwort: Mit RotatingFileHandler können Log-Dateien bei Erreichen einer bestimmten Größe rotiert werden.

Q3. Wie wählt man Drittanbieter-Bibliotheken aus?

Antwort:
Wählen Sie je nach Umfang und Anforderungen des Projekts. Für kleine Projekte eignet sich Loguru, für strukturierte Logs Structlog.

8. Beherrschen Sie die Log-Ausgabe in Python und steigern Sie die Entwicklungs effizienz

In diesem Artikel haben wir die Grundlagen der Log-Ausgabe in Python bis hin zu fortgeschrittenen Techniken und praktischen Drittanbieter-Bibliotheken erläutert. Durch eine angemessene Log-Ausgabe können Sie die Effizienz beim Debuggen und die Genauigkeit der Systemüberwachung erheblich verbessern. Probieren Sie es ab heute aus!

侍エンジニア塾