lezione 08

logging e osservabilità

log strutturati, livelli e handler custom.

livello: base durata: 30 min output: logging pipeline badge: observability

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.

start a brief