0Pricing
Python Academy · Lezione

Basi del modulo logging

Configuri i logger, imposti i livelli e generi correttamente i messaggi.

Basi del modulo logging è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Perché usare logging invece di print?

Il modulo logging fornisce livelli di severità, destinazioni di output configurabili, timestamp e la possibilità di silenziare l'output senza modificare il codice.

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

Livelli di log

Python definisce cinque livelli standard in ordine crescente di severità: DEBUG, INFO, WARNING, ERROR, CRITICAL. Vengono emessi solo i messaggi al livello configurato o a uno superiore.

import logging
# Numeric values:
# DEBUG    = 10
# INFO     = 20
# WARNING  = 30
# ERROR    = 40
# CRITICAL = 50

logging.basicConfig(level=logging.WARNING)
logging.debug("hidden")   # not shown
logging.warning("shown")  # shown

Ottenere un logger

Utilizzi logging.getLogger(__name__) in ogni modulo. In questo modo viene creata una gerarchia che rispecchia la struttura dei moduli.

import logging

logger = logging.getLogger(__name__)

def process(data):
    logger.info("Processing %d items", len(data))
    return [x * 2 for x in data]

Opzioni di basicConfig

basicConfig configura rapidamente il logger root. Kwarg comuni: level, format, filename, filemode.

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s %(levelname)s %(name)s — %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)

Campi del formato di log

Campi chiave del formato: %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s, %(lineno)d.

import logging

fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")

Registrazione delle eccezioni

Utilizzi logger.exception() all'interno di un blocco except per registrare il messaggio e l'intero traceback.

import logging
logger = logging.getLogger(__name__)

try:
    1 / 0
except ZeroDivisionError:
    logger.exception("Division failed")
    # Logs message + traceback automatically

Contesto aggiuntivo con extra=

Passi un dizionario come extra= per aggiungere campi personalizzati al record di log.

import logging
logger = logging.getLogger(__name__)

logging.basicConfig(
    format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})

Formattazione lazy delle stringhe

Passi separatamente gli argomenti del formato: non preformatti le stringhe. In questo modo evita il costo della costruzione della stringa quando il messaggio viene filtrato.

import logging
logger = logging.getLogger(__name__)

# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")

# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))

Disabilitare il logging

Chiami logging.disable(level) per sopprimere globalmente tutti i messaggi fino a quel livello; è utile nei test.

import logging

logging.disable(logging.CRITICAL)  # suppress everything
# All log calls now silently do nothing

logging.disable(logging.NOTSET)    # re-enable

Gerarchia dei logger

I nomi dei logger utilizzano i punti come separatori. I logger figli propagano i messaggi ai logger padre, a meno che non sia impostato propagate=False.

import logging

parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")

# child propagates to parent by default
child.warning("DB slow")  # also appears in myapp's handlers

Il logger root

Il logger root (quello usato da logging.warning() e simili) è l'antenato di tutti i logger. Lo configuri con basicConfig oppure aggiungendo direttamente gli handler.

import logging

root = logging.getLogger()  # root logger
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler()
root.addHandler(handler)

Verifica rapida

Quale metodo di logging deve utilizzare all'interno di un blocco except per includere automaticamente l'intero traceback?

Riepilogo

Utilizzi logger denominati con getLogger(__name__), li configuri tramite basicConfig, passi gli argomenti del formato in modo lazy e utilizzi logger.exception() per i traceback degli errori. I logger formano una gerarchia radicata nel logger root.

Domande Frequenti

La lezione «Basi del modulo logging» è gratuita?

Sì — il testo completo di «Basi del modulo logging» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Basi del modulo logging»?

Configuri i logger, imposti i livelli e generi correttamente i messaggi. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Basi del modulo logging»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi del modulo logging
  2. Handler, formatter e filtri
  3. Logging strutturato
  4. Debugging con pdb
← Torna a Python Academy