setup
usa il modulo logging per log coerenti in tutta l'app.
import logging
logging.basicConfig(level=logging.INFO)
log = logging.getLogger("app")
log.info("startup")
livelli e formati
definisci format con timestamp e contesto, e usa livelli coerenti.
formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s")
handler = logging.StreamHandler()
handler.setFormatter(formatter)
log.addHandler(handler)
log strutturati
aggiungi campi chiave per filtrare: user_id, request_id, module.
log.info("checkout", extra={"user_id": user_id, "request_id": req_id})
handler multipli
usa file handler per persistenza e stream handler per console.
file_handler = logging.FileHandler("app.log")
log.addHandler(file_handler)
esercizi
crea un logger con json formatter per integrazione con strumenti esterni.
aggiungi correlation id a tutte le richieste di un'api.
checklist
- usa livelli coerenti
- aggiungi contesto ai log
- separa stdout e file
- non loggare dati sensibili
panoramica
In questo capitolo su logging e osservabilità, log strutturati, livelli e handler custom. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: observability
obiettivi
- capire e applicare setup in uno scenario reale
- capire e applicare livelli in uno scenario reale
- capire e applicare log strutturati in uno scenario reale
- capire e applicare handlers in uno scenario reale
scheda rapida
def main():
dati = [1, 2, 3]
risultati = [x * 2 for x in dati]
print(risultati)
if __name__ == "__main__":
main()
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- usa un venv per ogni progetto
- separa logica e I/O
- mantieni funzioni piccole e nominative
- configura livelli per modulo
- usa name e level nel format
- separa log console/file
tip: Logga prima di gestire un'eccezione, non dopo.
mini progetto
Setup di logging con file e console.
- crea logger con getLogger
- aggiungi handler
- imposta livelli
- emetti log di test
output atteso: uno script o query ripetibile con risultati verificabili.