Naar hoofdinhoud gaan
LogBrew is een observability-platform voor developers en coding agents, met een royaal gratis abonnement en zonder creditcard. Deze handleiding stelt logging met Winston en Pino in voor Node.js, voegt een Express-logger toe en stuurt elke log met de trace van het request naar LogBrew. Elk voorbeeld draaide op Node.js 22 met Winston 3.19, Pino 10.4, Express 5.3, @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 als winston-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.
Voer node winston-app.js uit. De console krijgt 1 JSON-regel per record op info of hoger. De stacktrace is hier ingekort.
LogBrew ontvangt dezelfde 3 records. De velden worden 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 als pino-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.
Voer node pino-app.js uit. De hostnaam en de stacktrace zijn hier ingekort.
LogBrew ontvangt 3 records. Pino laat het 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.
Start de app. Stuur daarna 2 requests vanuit een tweede terminal.
LogBrew ontvangt deze events. De log en de span van elk request hebben dezelfde trace-ID. 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.
Voeg 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

De laatste opdracht leest alle logs van 1 request. Kopieer <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.