Strukturiertes Logging
Geben Sie JSON-formatierte Logs für maschinenlesbare Ausgaben aus.
Strukturiertes Logging ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Was ist strukturiertes Logging?
Strukturiertes Logging gibt Log-Datensätze als maschinenlesbare Daten (JSON) statt als freien Text aus. Dadurch lassen sie sich leicht indizieren, durchsuchen und für Alarme verwenden.
import logging, json
def log_json(level, msg, **kw):
record = {"level": level, "msg": msg, **kw}
print(json.dumps(record))
log_json("INFO", "Request received", path="/api/users", method="GET")Benutzerdefinierter JSON-Formatter
Leiten Sie logging.Formatter ab, um JSON statt einfachen Text auszugeben.
import logging, json
class JSONFormatter(logging.Formatter):
def format(self, record):
return json.dumps({
"time": self.formatTime(record),
"level": record.levelname,
"name": record.name,
"msg": record.getMessage(),
})
handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
logging.getLogger().addHandler(handler)python-json-logger
Das Paket python-json-logger stellt einen fertigen JSON-Formatter mit Standard- und zusätzlichen Feldern bereit.
# pip install python-json-logger
import logging
from pythonjsonlogger import jsonlogger
logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(jsonlogger.JsonFormatter())
logger.addHandler(handler)
logger.info("User created", extra={"user_id": 42})structlog
structlog ist eine beliebte Bibliothek eines Drittanbieters, die das Sammeln von Kontext von der Formatierung trennt und Prozessor-Pipelines unterstützt.
# pip install structlog
import structlog
log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")Kontext mit structlog binden
Mit structlog können Sie Schlüssel-Wert-Paare an einen Logger binden, die bei allen folgenden Aufrufen erhalten bleiben.
import structlog
log = structlog.get_logger().bind(
service="auth",
env="prod"
)
log.warning("login_failed", user="alice", reason="bad_password")
# {service:auth, env:prod, user:alice, reason:bad_password}Zeitstempel und Aufruferinformationen hinzufügen
Prozessoren können Datensätze automatisch anreichern. Fügen Sie TimeStamper und CallsiteParameterAdder zu jedem Log-Datensatz hinzu.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Request-IDs in Web-Apps protokollieren
Binden Sie in einem Web-Framework zu Beginn jeder Anfrage eine Request-ID, damit jede Logzeile während dieser Anfrage sie enthält.
import structlog
def middleware(request, call_next):
req_id = request.headers.get("X-Request-Id", generate_id())
log = structlog.get_logger().bind(request_id=req_id)
log.info("request_started", path=request.url.path)
response = call_next(request)
log.info("request_finished", status=response.status_code)
return responseECS-Log-Format
Elastic Common Schema (ECS) ist ein standardisiertes JSON-Log-Format für den Elastic Stack. Verwenden Sie ecs-logging für Python.
# pip install ecs-logging
import logging
import ecs_logging
logger = logging.getLogger("app")
handler = logging.StreamHandler()
handler.setFormatter(ecs_logging.StdlibFormatter())
logger.addHandler(handler)
logger.info("Event logged in ECS format")Systeme zur Log-Aggregation
Strukturierte JSON-Logs lassen sich direkt in Aggregationswerkzeuge übertragen: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog und AWS CloudWatch Logs Insights.
# Loki query example:
# {app="myservice"} | json | level="ERROR"
# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp descKeine personenbezogenen Daten in Logs
Entfernen oder anonymisieren Sie personenbezogene Daten vor dem Protokollieren. Verwenden Sie einen benutzerdefinierten Prozessor oder Filter, um E-Mail-Adressen, Tokens und Passwörter zu maskieren.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictVor- und Nachteile strukturierter und unstrukturierter Logs
Strukturierte Logs lassen sich durchsuchen und für Alarme verwenden, sind aber ausführlicher. Kombinieren Sie in der Produktion strukturiertes Logging mit einer menschenlesbaren Formatierung in der Entwicklung, gesteuert durch eine umgebungsbasierte Konfiguration.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Kurztest
Was ist der wichtigste Vorteil von JSON-strukturierten Logs gegenüber Logs im Klartext?
Zusammenfassung
Strukturiertes Logging gibt JSON-Datensätze mit Schlüssel-Wert-Paaren aus. Verwenden Sie einen JSONFormatter, python-json-logger oder structlog. Binden Sie den Kontext (Request-ID, Benutzer) zu Beginn einer Operation, damit jede Logzeile während dieser Operation ihn enthält.
Häufig gestellte Fragen
Ist die Lektion „Strukturiertes Logging“ kostenlos?
Ja — der vollständige Text von „Strukturiertes Logging“ 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 „Strukturiertes Logging“?
Geben Sie JSON-formatierte Logs für maschinenlesbare Ausgaben aus. 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 3 von 4.
Wie lange dauert die Lektion „Strukturiertes Logging“?
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