Text-Logs und strukturierte Logs
Dieses Text-Log enthält dieselben Fakten wie das strukturierte Log darunter.message und order_id. Die Nachricht bleibt für jede
Bestellung gleich. So können Sie sie auch zählen.
Log-Format wählen
Verwenden Sie JSON mit 1 Objekt pro Zeile. Verwenden Sie in allen Diensten dieselben Feldnamen. Diese Tabelle listet die Basisfelder und die passenden Namen im Log-Datenmodell von OpenTelemetry und in LogBrew.
Die Schweregrad-Zahlen von OpenTelemetry reichen von 1 bis 24.
INFO beginnt
bei 9, WARN bei 13, ERROR bei 17 und FATAL bei 21. LogBrew nimmt
OTLP-Logs direkt an. Siehe
OpenTelemetry-Daten senden.
Best Practices für Logging
Feste Nachrichten verwenden
Schreiben Sie"payment failed" und legen Sie die Bestell-ID in ein Feld. Mit
einer festen Nachricht können Sie 1 Ereignistyp gruppieren, zählen und dafür
Alarme setzen.
1 Namen pro Feld verwenden
Wählen Sie einmalorder_id oder orderId und verwenden Sie den Namen in
allen Diensten. Verwenden Sie für gängige Felder die Namen der semantischen
Konventionen von OpenTelemetry, zum Beispiel http.response.status_code.
Level nach der nötigen Reaktion wählen
error bedeutet, dass eine Operation fehlgeschlagen ist. warning bedeutet,
dass sich das Programm erholt hat. info bestätigt normale Arbeit. Verwenden
Sie debug nur bei der Fehlersuche.
Zeit in UTC schreiben
Verwenden Sie RFC 3339 mit Millisekunden und Offset, zum Beispiel2026-11-07T14:21:19.773+00:00. Ohne UTC und Millisekunden sortieren sich
Einträge aus verschiedenen Zeitzonen oder aus derselben Sekunde in falscher
Reihenfolge.
Trace-ID und Span-ID hinzufügen
Mit diesen IDs lesen Sie alle Logs von 1 Anfrage über alle Dienste hinweg.Dienst, Umgebung und Release einmal setzen
Konfigurieren Sie diese Werte beim Start, nicht in jedem Aufruf. Ohne Release ist nicht erkennbar, welche Bereitstellung eine Änderung verursacht hat.Fehler einmal loggen, dort, wo Sie ihn behandeln
Fügen Sie Fehlertyp und Meldung hinzu. Loggen Sie denselben Fehler nicht in jeder Schicht erneut.Secrets und personenbezogene Daten heraushalten
Loggen Sie keine Passwörter, Tokens, Cookies, Anfrage-Bodys oder vollständigen URLs mit Query-Strings. Nutzen Sie die Schwärzungsfunktion Ihres Loggers. Siehe Erfasste Daten steuern.Feste Feldnamen verwenden
Verwenden Sie keine Werte als Feldnamen, zum Beispiel{"ord_1001": "failed"}.
Sonst fügt jeder neue Wert ein neues Feld hinzu, und 1 Filter findet nicht
alle Bestellungen.
JSON in der Produktion auf die Standardausgabe schreiben
Verwenden Sie ein lesbares Format nur in der Entwicklung.Structured Logging in Python
Das Standardmodullogging hat keinen JSON-Formatter. Dieser Formatter
schreibt die Basisfelder und die Werte aus extra={"fields": {...}}.
LogBrewLoggingHandler
hinzu. Der Handler sendet Nachricht, Level und Logger als Felder und primitive
Werte aus extra als Metadaten. Siehe
Python-Logging.
Structured Logging in Node.js
Pino schreibt standardmäßig 1 JSON-Zeile pro Eintrag. Winston schreibt JSON mitwinston.format.json(). Beide behalten Felder aus dem Aufruf und aus
Child-Loggern. Beide Einrichtungen und die Trace-ID in Express-Logs finden Sie
unter Node.js-Logging.
