@logbrew/sdk 0.1.40, @logbrew/node 0.1.24 und @logbrew/express 0.1.10.
Jeder Ausgabeblock zeigt die echte Ausgabe.
Winston oder Pino wählen
Beide Bibliotheken schreiben strukturierte JSON-Logs. Behalten Sie die Bibliothek, die Ihre App schon verwendet. Die LogBrew-Einrichtung ist für jede Bibliothek anders.LogBrew-Projekt vorbereiten
1
Projektschlüssel erstellen
Melden Sie sich mit der CLI an. Erstellen Sie ein
Projekt und speichern Sie seinen Ingest-Schlüssel in einer Datei, die nur
der Eigentümer lesen kann.Die CLI gibt den Schlüssel nicht aus. Verwenden Sie in der Produktion den
Secret Manager Ihrer Plattform.
2
Pakete installieren
Die Pakete erfordern Node.js 18.19 oder neuer. Installieren Sie Winston,
Pino oder beide.
3
Schlüssel und Bereitstellungsidentität setzen
createLogBrewNodeClient() liest den Schlüssel aus
LOGBREW_SERVER_API_KEY. Der Dienstname ist der name in package.json.
Setzen Sie LOGBREW_SERVICE_NAME, um einen anderen Namen zu verwenden.
Die Beispiele verwenden ES-Module. Setzen Sie deshalb "type": "module"
in package.json.Node.js-Log-Levels
Jede Bibliothek hat eigene Level-Namen und Zahlen. LogBrew speichert 4 Levels und behält das ursprüngliche Level in den Metadaten.
Bei Winston ist eine niedrigere Zahl schwerwiegender. Bei Pino ist eine höhere
Zahl schwerwiegender. Setzen Sie in der Produktion
info und debug nur für
eine kurze Diagnose.
Winston-Logger
Speichern Sie diese Datei alswinston-app.js. Das erste Format verwirft
Einträge unter dem Level des Loggers, bevor ein Transport sie erhält. Der
LogBrew-Transport erhält jeden Eintrag, den der Logger schreibt. Deshalb
braucht er diesen Filter.
node winston-app.js aus. Die Konsole erhält 1 JSON-Zeile pro
Eintrag mit info oder höher. Der Stacktrace ist hier gekürzt.
context.*.
Der Transport sendet Name und Meldung des Fehlers, aber nicht den Stacktrace.
Setzen Sie
includeErrorStack: true in createLogBrewWinstonTransport(), um
den Stacktrace zu senden. Jede Nachricht wird außerdem zu einem vorherigen
Schritt im nächsten Issue. Setzen Sie breadcrumbs: false, um das
abzuschalten.
Pino-Logger
Speichern Sie diese Datei alspino-app.js. Rufen Sie
installLogBrewPinoInstrumentation() einmal vor dem ersten Log auf. Die
Funktion liest jeden fertigen Pino-Eintrag. Pino schreibt weiterhin an sein
eigenes Ziel.
node pino-app.js aus. Hostname und Stacktrace sind hier gekürzt.
debug, bevor
LogBrew ihn sieht.
Das Feld
token kommt nicht in LogBrew an. LogBrew verwirft Felder für
Zugangsdaten, Cookies, Bodys, Query-Strings, URLs und Stacktraces. Die Pfade
in Ihrer Pino-Option redact bleiben als zweite Kontrolle aktiv. pid,
hostname und time sind Standardfelder von Pino. Deshalb kopiert LogBrew
sie nicht.
Die automatische Erfassung erfordert Pino 9.11 oder neuer in der Reihe 9.x
oder Pino 10.1 oder neuer. Für ältere Pino-Versionen verwenden Sie
createLogBrewPinoDestination() aus @logbrew/sdk als Pino-Ziel.
Um die Pino-Ausgabe in der Entwicklung zu lesen, leiten Sie sie an
pino-pretty weiter.
Express-Logger
logbrewMiddleware() erstellt 1 Anfrage-Span pro Anfrage.
logbrewErrorHandler() meldet Fehler als Issues. Ein Pino-Log innerhalb einer
Anfrage erhält die Trace-ID und die Span-ID dieser Anfrage. Speichern Sie diese
Datei als express-app.js.
Der Span-Name verwendet die Routenvorlage, nicht den konkreten Pfad. Das Log
listening on 3000 hat keinen Trace, weil es außerhalb einer Anfrage
entsteht.
Lassen Sie die Middleware ihre eigenen Anfrage-Clients erstellen. Übergeben
Sie den prozessweiten client nicht an logbrewMiddleware() oder
logbrewErrorHandler(). Die Middleware fährt ihren Anfrage-Client nach jeder
Antwort herunter.
Trace zu Winston-Logs hinzufügen
Bei Winston übergeben Sie dem Transport den aktiven Trace.logbrewTransport zur Liste transports des Loggers hinzu. Ein
Winston-Log innerhalb einer Express-Anfrage hat dann die Trace-ID und die
Span-ID der Anfrage.
Logs zurücklesen
<trace_id>
aus einem Trace oder einem Issue. Für Lesezugriffe aus CI oder von einem
Coding-Agenten verwenden Sie einen Projekt-Leseschlüssel. Siehe
Einrichtung prüfen.
Ohne verlorene Logs herunterfahren
Der Client sendet wartende Ereignisse 1 Sekunde nach dem ersten Ereignis oder bei 50 Ereignissen. Wenn die Event Loop leer ist, sendet der Client die restlichen Ereignisse höchstens 2 Sekunden lang.process.exit() und Signale
überspringen diesen Schritt. Rufen Sie await client.shutdown() vor dem
Beenden auf, so wie der Handler für SIGTERM im Express-Beispiel.
Probleme beheben
Zur Wahl der Log-Felder siehe
Structured Logging. Für andere Frameworks
siehe SDK-Integration.
