0Pricing
Python Academy · Lektion

Handler, Formatter und Filter

Leiten Sie die Protokollausgabe an Dateien, Streams und benutzerdefinierte Ziele weiter.

Handler, Formatter und Filter ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Handler leiten Log-Datensätze weiter

Ein Handler sendet Log-Datensätze an ein Ziel: Konsole, Datei, HTTP-Endpunkt usw. Ein Logger kann mehrere Handler haben.

import logging

logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)

sh = logging.StreamHandler()
logger.addHandler(sh)

logger.info("Goes to console")

StreamHandler

StreamHandler schreibt in einen Stream (standardmäßig sys.stderr). Übergeben Sie sys.stdout für die Ausgabe nach stdout.

import logging, sys

logger = logging.getLogger("out")
handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)
logger.warning("printed to stdout")

FileHandler

FileHandler hängt Datensätze an eine Datei an. Verwenden Sie mode="w", um die Datei bei jedem Lauf zu überschreiben.

import logging

logging.basicConfig(
    filename="app.log",
    filemode="a",
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s"
)
logging.info("Persisted to disk")

RotatingFileHandler

Rotieren Sie Log-Dateien automatisch, sobald sie ein Größenlimit überschreiten, und behalten Sie dabei N Sicherungsdateien.

from logging.handlers import RotatingFileHandler
import logging

handler = RotatingFileHandler(
    "app.log", maxBytes=1_000_000, backupCount=5
)
logging.getLogger().addHandler(handler)

TimedRotatingFileHandler

Rotieren Sie Log-Dateien nach einem Zeitplan – täglich, wöchentlich oder stündlich – ideal für langlebige Dienste.

from logging.handlers import TimedRotatingFileHandler
import logging

handler = TimedRotatingFileHandler(
    "app.log", when="midnight", backupCount=7
)
logging.getLogger().addHandler(handler)

Formatter

Ein Formatter steuert das Textlayout jedes Log-Datensatzes. Hängen Sie ihn mit handler.setFormatter() an einen Handler an.

import logging

fmt = logging.Formatter(
    fmt="%(asctime)s %(levelname)-8s %(name)s — %(message)s",
    datefmt="%Y-%m-%dT%H:%M:%S"
)
handler = logging.StreamHandler()
handler.setFormatter(fmt)
logging.getLogger().addHandler(handler)

Filterung auf Handler-Ebene

Jeder Handler hat sein eigenes Level. Ein Datensatz muss sowohl das Logger-Level als auch das Handler-Level passieren, bevor er ausgegeben wird.

import logging

logger = logging.getLogger("app")
logger.setLevel(logging.DEBUG)   # logger passes DEBUG+

err_handler = logging.FileHandler("errors.log")
err_handler.setLevel(logging.ERROR)  # only ERROR+
logger.addHandler(err_handler)

Benutzerdefinierte Filter

Leiten Sie logging.Filter ab und überschreiben Sie filter(record), um Datensätze anhand beliebiger Kriterien zu akzeptieren oder abzulehnen.

import logging

class SensitiveFilter(logging.Filter):
    def filter(self, record):
        return "password" not in record.getMessage().lower()

handler = logging.StreamHandler()
handler.addFilter(SensitiveFilter())
logging.getLogger().addHandler(handler)

Zusätzliche Felder mit einem Filter hinzufügen

Filter können den Datensatz auch verändern und zusätzliche Felder einfügen, beispielsweise eine Request-ID, bevor die Formatierung erfolgt.

import logging

class RequestIDFilter(logging.Filter):
    def __init__(self, request_id):
        self.request_id = request_id
    def filter(self, record):
        record.request_id = self.request_id
        return True

# fmt: "%(request_id)s %(message)s"

Mehrere Handler für einen Logger

Fügen Sie mehrere Handler hinzu, um dieselben Log-Datensätze gleichzeitig an mehrere Ziele zu senden.

import logging

logger = logging.getLogger("multi")
logger.addHandler(logging.StreamHandler())             # console
logger.addHandler(logging.FileHandler("audit.log"))   # file
logger.setLevel(logging.INFO)
logger.info("Both destinations receive this")

Weiterleitung deaktivieren

Setzen Sie logger.propagate = False, um zu verhindern, dass Datensätze an den Root-Logger weitergereicht und doppelt protokolliert werden.

import logging

logger = logging.getLogger("mylib")
logger.propagate = False   # stays here, does not reach root
logger.addHandler(logging.StreamHandler())

Kurztest

Mit welcher Methode wird ein Formatter an einen Handler angehängt?

Zusammenfassung

Handler leiten Datensätze weiter, Formatter gestalten sie und Filter lassen sie selektiv passieren oder blockieren sie. Verwenden Sie RotatingFileHandler für größenbegrenzte Logs und TimedRotatingFileHandler für eine zeitbasierte Rotation.

Häufig gestellte Fragen

Ist die Lektion „Handler, Formatter und Filter“ kostenlos?

Ja — der vollständige Text von „Handler, Formatter und Filter“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Handler, Formatter und Filter“?

Leiten Sie die Protokollausgabe an Dateien, Streams und benutzerdefinierte Ziele weiter. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Handler, Formatter und Filter“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen des logging-Moduls
  2. Handler, Formatter und Filter
  3. Strukturiertes Logging
  4. Debugging mit pdb
← Zurück zu Python Academy