@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 comewinston-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.
node winston-app.js. La console riceve 1 riga JSON per ogni record di
livello info o superiore. Qui lo stack trace è accorciato.
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 comepino-app.js. Chiama
installLogBrewPinoInstrumentation() una volta, prima del primo log. La
funzione legge ogni record Pino completato. Pino scrive ancora nella propria
destinazione.
node pino-app.js. Qui il nome host e lo stack trace sono accorciati.
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.
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.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
<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.
