Vai al contenuto principale
LogBrew è una piattaforma di osservabilità per sviluppatori e agenti di codifica, con un piano gratuito generoso e senza carta di credito. Questa guida configura il logging con Winston e con Pino in Node.js, aggiunge un logger Express e invia ogni log a LogBrew con la traccia della sua richiesta. Tutti gli esempi girano su Node.js 22 con Winston 3.19, Pino 10.4, Express 5.3, @logbrew/sdk 0.1.40, @logbrew/node 0.1.24 e @logbrew/express 0.1.10. Ogni blocco di output mostra l’output reale.

Scegli Winston o Pino

Entrambe le librerie scrivono log JSON strutturati. Tieni la libreria che la tua app usa già. La configurazione di LogBrew cambia per ciascuna.

Prepara un progetto LogBrew

1

Crea una chiave del progetto

Accedi con la CLI. Crea un progetto e salva la sua chiave di ingestione in un file leggibile solo dal proprietario.
La CLI non stampa la chiave. In produzione, usa il gestore dei segreti della tua piattaforma.
2

Installa i pacchetti

I pacchetti richiedono Node.js 18.19 o versioni successive. Installa Winston, Pino o entrambi.
3

Imposta la chiave e l'identità del deploy

createLogBrewNodeClient() legge la chiave da LOGBREW_SERVER_API_KEY. Il nome del servizio è il name in package.json. Imposta LOGBREW_SERVICE_NAME per usare un nome diverso. Gli esempi usano i moduli ES, quindi imposta "type": "module" in package.json.

Livelli di log in Node.js

Ogni libreria ha nomi e numeri di livello propri. LogBrew salva 4 livelli e conserva il livello originale nei metadati. In Winston, un numero più basso indica una gravità maggiore. In Pino, un numero più alto indica una gravità maggiore. Imposta info in produzione e debug solo per una breve diagnosi.

Logger Winston

Salva questo file come winston-app.js. Il primo formato scarta i record sotto il livello del logger prima che un transport li riceva. Il transport di LogBrew riceve ogni record che il logger scrive, quindi gli serve questo filtro.
Esegui node winston-app.js. La console riceve 1 riga JSON per ogni record di livello info o superiore. Qui lo stack trace è accorciato.
LogBrew riceve gli stessi 3 record. I campi diventano metadati context.*. Il transport invia il nome e il messaggio dell’errore, ma non lo stack trace. Imposta includeErrorStack: true in createLogBrewWinstonTransport() per inviare lo stack trace. Ogni messaggio diventa anche un breadcrumb del problema successivo. Imposta breadcrumbs: false per disattivarlo.

Logger Pino

Salva questo file come pino-app.js. Chiama installLogBrewPinoInstrumentation() una volta, prima del primo log. La funzione legge ogni record Pino completato. Pino scrive ancora nella propria destinazione.
Esegui node pino-app.js. Qui il nome host e lo stack trace sono accorciati.
LogBrew riceve 3 record. Pino scarta il record debug prima che LogBrew lo veda. Il campo token non arriva in LogBrew. LogBrew scarta i campi di credenziali, cookie, body, parametri di query, URL e stack trace. Inoltre mantiene i tuoi percorsi redact di Pino come secondo controllo. pid, hostname e time sono valori predefiniti di Pino, quindi LogBrew non li copia. L’acquisizione automatica richiede Pino 9.11 o versioni successive nella serie 9.x, oppure Pino 10.1 o versioni successive. Per le versioni di Pino precedenti, usa createLogBrewPinoDestination() di @logbrew/sdk come destinazione Pino. Per leggere l’output di Pino in sviluppo, invialo a pino-pretty.

Logger Express

logbrewMiddleware() crea 1 span di richiesta per ogni richiesta. logbrewErrorHandler() segnala gli errori come problemi. Un log Pino dentro una richiesta riceve l’ID traccia e l’ID span di quella richiesta. Salva questo file come express-app.js.
Avvia l’app. Poi invia 2 richieste da un secondo terminale.
LogBrew riceve questi eventi. Il log e lo span di ogni richiesta hanno lo stesso ID traccia. Il nome dello span usa il modello della route, non il percorso concreto. Il log listening on 3000 non ha una traccia, perché è fuori da una richiesta. Lascia che il middleware crei i propri client di richiesta. Non passare il client dell’intero processo a logbrewMiddleware() o logbrewErrorHandler(). Il middleware chiude il suo client di richiesta dopo ogni risposta.

Aggiungi la traccia ai log Winston

Con Winston, passa la traccia attiva al transport.
Aggiungi logbrewTransport alla lista transports del logger. Un log Winston dentro una richiesta Express ha così l’ID traccia e l’ID span della richiesta.

Rileggi i log

L’ultimo comando legge tutti i log di 1 richiesta. Copia <trace_id> da una traccia o da un problema. Per leggere da CI o da un agente di codifica, usa una chiave di lettura del progetto. Vedi Verifica la configurazione.

Chiudi senza perdere log

Il client invia gli eventi in coda 1 secondo dopo il primo evento o al raggiungimento di 50 eventi. Quando l’event loop è vuoto, il client invia gli eventi rimanenti per al massimo 2 secondi. process.exit() e i segnali del sistema saltano questo passaggio. Chiama await client.shutdown() prima di uscire, come fa l’handler SIGTERM nell’esempio Express.

Risoluzione degli errori

Per scegliere i campi dei log, vedi Logging strutturato. Per altri framework, vedi Integrazione SDK.