0Pricing
Python Academy · Lektion

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 response

ECS-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 desc

Keine 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_dict

Vor- 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

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