Log testuali e log strutturati
Questo log testuale contiene gli stessi fatti del log strutturato qui sotto.message e order_id. Il messaggio resta uguale per ogni ordine,
quindi puoi anche contarlo.
Scegli un formato di log
Usa JSON, con 1 oggetto per riga. Usa gli stessi nomi di campo in tutti i servizi. Questa tabella elenca i campi di base e i nomi corrispondenti nel modello dati dei log di OpenTelemetry e in LogBrew.
I numeri di gravità di OpenTelemetry vanno da 1 a 24.
INFO parte da 9,
WARN da 13, ERROR da 17 e FATAL da 21. LogBrew accetta direttamente i
log OTLP. Vedi Invia dati OpenTelemetry.
Best practice per il logging
Mantieni fisso il messaggio
Scrivi"payment failed" e metti l’ID dell’ordine in un campo. Un messaggio
fisso ti permette di raggruppare, contare e creare alert su 1 tipo di evento.
Usa 1 nome per ogni campo
Scegliorder_id o orderId una volta e usalo in tutti i servizi. Per i campi
comuni, usa i nomi delle convenzioni semantiche di OpenTelemetry, come
http.response.status_code.
Scegli il livello in base all’azione richiesta
error significa che un’operazione è fallita. warning significa che il
programma si è ripreso. info conferma il lavoro normale. Usa debug solo
mentre cerchi un errore.
Scrivi l’ora in UTC
Usa RFC 3339 con millisecondi e offset, come2026-11-07T14:21:19.773+00:00.
Senza UTC e millisecondi, i record di fusi orari diversi, o dello stesso
secondo, finiscono nell’ordine sbagliato.
Aggiungi l’ID traccia e l’ID span
Con questi ID, leggi tutti i log di 1 richiesta in tutti i servizi.Imposta servizio, ambiente e release una sola volta
Configurali all’avvio, non in ogni chiamata. Senza la release, non sai quale deploy ha causato un cambiamento.Registra un errore una sola volta, dove lo gestisci
Aggiungi il tipo e il messaggio dell’errore. Non registrare di nuovo lo stesso errore a ogni strato.Tieni fuori segreti e dati personali
Non registrare password, token, cookie, body delle richieste o URL completi con query string. Usa la funzione di oscuramento del tuo logger. Vedi Controlla i dati acquisiti.Usa nomi di campo fissi
Non usare valori come nomi di campo, come{"ord_1001": "failed"}. Ogni nuovo
valore aggiunge così un nuovo campo, e 1 filtro non trova tutti gli ordini.
Scrivi JSON sullo standard output in produzione
Usa un formato leggibile solo in sviluppo.Logging strutturato in Python
Il modulo standardlogging non ha un formatter JSON. Questo formatter scrive
i campi di base e i valori di extra={"fields": {...}}.
LogBrewLoggingHandler.
Invia messaggio, livello e logger come campi, e i valori primitivi di extra
come metadati. Vedi Logging in Python.
Logging strutturato in Node.js
Pino scrive di default 1 riga JSON per ogni record. Winston scrive JSON conwinston.format.json(). Entrambi mantengono i campi della chiamata e dei
logger figli. Vedi Logging in Node.js per le due
configurazioni e per l’ID traccia nei log Express.
