@logbrew/sdk 0.1.40, @logbrew/node 0.1.24 en @logbrew/express 0.1.10. Elk
outputblok toont de echte output.
Winston of Pino kiezen
Beide libraries schrijven structured logs in JSON. Houd de library die je app al gebruikt. De LogBrew-setup is voor elke library anders.Een LogBrew-project voorbereiden
1
Maak een projectsleutel
Log in met de CLI. Maak een project en sla de
ingest-sleutel op in een bestand dat alleen de eigenaar kan lezen.De CLI print de sleutel niet. Gebruik in productie de secretmanager van je
platform.
2
Installeer de pakketten
De pakketten vereisen Node.js 18.19 of nieuwer. Installeer Winston, Pino of
allebei.
3
Stel de sleutel en de deploymentidentiteit in
createLogBrewNodeClient() leest de sleutel uit LOGBREW_SERVER_API_KEY.
De servicenaam is de name in package.json. Stel LOGBREW_SERVICE_NAME
in voor een andere naam. De voorbeelden gebruiken ES-modules, dus zet
"type": "module" in package.json.Loglevels in Node.js
Elke library heeft eigen namen en getallen voor levels. LogBrew slaat 4 levels op en bewaart het oorspronkelijke level in de metadata.
In Winston is een lager getal ernstiger. In Pino is een hoger getal ernstiger.
Stel in productie
info in. Gebruik debug alleen voor een korte diagnose.
Winston-logger
Sla dit bestand op alswinston-app.js. Het eerste format laat records onder
het level van de logger vallen voordat een transport ze krijgt. Het
LogBrew-transport ontvangt elk record dat de logger schrijft, dus dit filter is
nodig.
node winston-app.js uit. De console krijgt 1 JSON-regel per record op
info of hoger. De stacktrace is hier ingekort.
context.*-metadata.
Het transport verstuurt de naam en het bericht van de fout, maar niet de
stacktrace. Stel
includeErrorStack: true in bij
createLogBrewWinstonTransport() om de stacktrace te versturen. Elk bericht
wordt ook een breadcrumb bij het volgende issue. Stel breadcrumbs: false in om
dat te stoppen.
Pino-logger
Sla dit bestand op alspino-app.js. Roep installLogBrewPinoInstrumentation()
één keer aan, vóór de eerste log. Het leest elk afgerond Pino-record. Pino
schrijft nog steeds naar zijn eigen bestemming.
node pino-app.js uit. De hostnaam en de stacktrace zijn hier ingekort.
debug-record vallen voordat LogBrew
het ziet.
Het veld
token staat niet in LogBrew. LogBrew laat velden voor
toegangsgegevens, cookies, body, query, URL en stacktrace vallen. Je Pino-paden
in redact blijven een tweede controle. pid, hostname en time zijn
standaardvelden van Pino, dus LogBrew kopieert ze niet.
Automatische vastlegging vereist Pino 9.11 of nieuwer in de 9.x-reeks, of Pino
10.1 of nieuwer. Gebruik voor oudere Pino-versies
createLogBrewPinoDestination() uit @logbrew/sdk als Pino-bestemming.
Stuur de Pino-output naar pino-pretty om hem in ontwikkeling te lezen.
Express-logger
logbrewMiddleware() maakt 1 request-span per request. logbrewErrorHandler()
meldt fouten als issues. Een Pino-log binnen een request krijgt de trace-ID en
span-ID van dat request. Sla dit bestand op als express-app.js.
De naam van de span gebruikt het routesjabloon en niet het concrete pad. De log
listening on 3000 heeft geen trace, omdat hij buiten een request valt.
Laat de middleware zijn eigen request-clients maken. Geef de procesbrede
client niet door aan logbrewMiddleware() of logbrewErrorHandler(). De
middleware sluit zijn request-client na elke response af.
De trace toevoegen aan Winston-logs
Geef voor Winston de actieve trace door aan het transport.logbrewTransport toe aan de lijst transports van de logger. Een
Winston-log binnen een Express-request heeft dan de trace-ID en span-ID van het
request.
De logs teruglezen
<trace_id> uit een
trace of een issue. Gebruik een leessleutel van je project om te lezen vanuit CI
of een coding agent. Zie Je installatie controleren.
Afsluiten zonder verloren logs
De client verstuurt events uit de wachtrij 1 seconde na het eerste event of bij 50 events. Als de event loop leeg is, verstuurt de client de resterende events, maximaal 2 seconden lang.process.exit() en signalen slaan die stap over. Roep
await client.shutdown() aan voordat je afsluit, zoals de SIGTERM-handler in
het Express-voorbeeld doet.
Problemen oplossen
Zie Structured logging om logvelden te
kiezen. Zie SDK-integratie voor andere frameworks.
