Zum Hauptinhalt springen
LogBrew ist eine Observability-Plattform für Entwickler und Coding-Agenten, mit großzügigem Gratis-Kontingent und ohne Karte. Structured Logging schreibt jeden Log-Eintrag als benannte Felder, nicht als eine Zeile Freitext. Ein Programm, eine Person oder ein Coding-Agent kann die Einträge dann nach Feldern filtern, zählen und mit einem Anfrage-Trace verbinden.

Text-Logs und strukturierte Logs

Dieses Text-Log enthält dieselben Fakten wie das strukturierte Log darunter.
Um im Text-Log alle fehlgeschlagenen Zahlungen für 1 Bestellung zu finden, müssen Sie für jede Nachrichtenvariante ein Muster schreiben. Im strukturierten Log filtern Sie nach 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 einmal order_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 Beispiel 2026-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 Standardmodul logging hat keinen JSON-Formatter. Dieser Formatter schreibt die Basisfelder und die Werte aus extra={"fields": {...}}.
Um dieselben Einträge an LogBrew zu senden, fügen Sie 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 mit winston.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.

Strukturierte Logs in LogBrew durchsuchen

LogBrew speichert jedes Log mit Nachricht, Level, Logger, Metadaten und Trace. Filtern Sie mit der CLI nach diesen Feldern.
Die API kann auch nach typisierten Metadatenwerten filtern, zum Beispiel nach einer Zahl ab 500. Siehe Abfragefilter.