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
- Grundlagen des logging-Moduls
- Handler, Formatter und Filter
- Strukturiertes Logging
- Debugging mit pdb