logging — registrazione degli eventi

Questo modulo fornisce un sottoinsieme leggero del pacchetto logging standard di Python, adattato a MicroPython. Supporta la registrazione per livelli tramite oggetti Logger con nomi gerarchici, un piccolo insieme di handler (StreamHandler, FileHandler), la formattazione in stile printf tramite Formatter e funzioni di comodità a livello di modulo equivalenti a quelle che operano sul logger radice.

Il modulo segue l’API familiare di CPython in modo abbastanza fedele da far funzionare senza modifiche le applicazioni semplici scritte per la libreria standard. Non sono forniti i filtri, il blocco multi-processo, il formato del file di configurazione e la maggior parte delle classi di handler.

Costanti di livello

logging.CRITICAL: int

Valore numerico 50. Usato per errori irrecuperabili.

logging.ERROR: int

Valore numerico 40. Usato per problemi gravi.

logging.WARNING: int

Valore numerico 30. Livello predefinito per un logger radice appena configurato.

logging.INFO: int

Valore numerico 20. Usato per i messaggi di conferma.

logging.DEBUG: int

Valore numerico 10. Usato per l’output diagnostico dettagliato.

logging.NOTSET: int

Valore numerico 0. Indica un logger senza livello configurato (il livello effettivo viene quindi ereditato dal logger radice o da WARNING).

Funzioni

logging.getLogger(name: str | None = None) Logger

Restituisce il Logger registrato sotto name, creandolo al primo utilizzo. Se name è None viene restituito il logger radice. La prima chiamata con name="root" (o con name non impostato) invoca implicitamente basicConfig per collegare uno StreamHandler predefinito che scrive su sys.stderr.

logging.log(level: int, msg: str, *args) None

Registra un messaggio a livello level sul logger radice. Gli args vengono interpolati in msg usando la formattazione in stile printf con %; un singolo argomento dict viene usato come mappatura.

logging.debug(msg: str, *args) None

Equivalente a getLogger().debug(msg, *args).

logging.info(msg: str, *args) None

Equivalente a getLogger().info(msg, *args).

logging.warning(msg: str, *args) None

Equivalente a getLogger().warning(msg, *args).

logging.error(msg: str, *args) None

Equivalente a getLogger().error(msg, *args).

logging.critical(msg: str, *args) None

Equivalente a getLogger().critical(msg, *args).

logging.exception(msg: str, *args, exc_info: bool | BaseException = True) None

Equivalente a getLogger().exception(msg, *args, exc_info=exc_info). Registra il messaggio a livello ERROR e, inoltre, formatta il traceback dell’eccezione attiva quando exc_info è vero. Se exc_info è esso stesso un BaseException, viene usato il traceback di tale eccezione; altrimenti, quando disponibile, viene consultato sys.exc_info().

logging.shutdown() None

Chiude ogni handler collegato a ogni logger noto e dimentica i logger. Registrato automaticamente tramite sys.atexit quando tale hook è disponibile.

logging.addLevelName(level: int, name: str) None

Associa il nome testuale name al livello numerico level in modo che Formatter possa renderizzarlo tramite %(levelname)s.

logging.basicConfig(filename: str | None = None, filemode: str = 'a', format: str | None = None, datefmt: str | None = None, level: int = WARNING, stream=None, encoding: str = 'UTF-8', force: bool = False) None

Configura il logger radice con un singolo handler.

Se viene fornito filename viene creato un FileHandler usando filemode e encoding; altrimenti viene usato uno StreamHandler che scrive su stream (con valore predefinito sys.stderr).

format e datefmt vengono passati a un nuovo Formatter.

level imposta sia il livello dell’handler sia il livello del logger radice.

Se il logger radice ha già degli handler questa funzione non ha effetto a meno che force non sia True, nel qual caso gli handler esistenti vengono chiusi e sostituiti.

Classi

class logging.Logger(name: str, level: int = NOTSET)

Un logger con nome. Costruisci i logger tramite getLogger anziché direttamente, in modo che getLogger possa restituire la stessa istanza per lo stesso nome.

name: str

Il nome puntato del logger.

level: int

Il livello numerico configurato. 0 (NOTSET) significa «eredita».

handlers: list

L’elenco delle istanze di Handler collegate a questo logger. Quando è vuoto, i messaggi vengono inviati agli handler del logger radice.

setLevel(level: int) None

Imposta il livello di soglia del logger.

isEnabledFor(level: int) bool

Restituisce True se un messaggio di livello level verrebbe elaborato da questo logger.

getEffectiveLevel() int

Restituisce il primo valore diverso da zero tra: il livello di questo logger, il livello del logger radice o WARNING.

log(level: int, msg: str, *args) None

Registra msg a livello level. Gli args vengono interpolati in msg con l’operatore %; se il primo argomento posizionale è un dict, viene usato come mappatura.

debug(msg: str, *args) None

Registra msg a livello DEBUG.

info(msg: str, *args) None

Registra msg a livello INFO.

warning(msg: str, *args) None

Registra msg a livello WARNING.

error(msg: str, *args) None

Registra msg a livello ERROR.

critical(msg: str, *args) None

Registra msg a livello CRITICAL.

exception(msg: str, *args, exc_info: bool | BaseException = True) None

Registra msg a livello ERROR e, quando exc_info è vero, accoda il traceback formattato. Se exc_info è un’istanza di BaseException, viene renderizzato il traceback di tale eccezione; altrimenti l’eccezione attiva viene consultata tramite sys.exc_info().

addHandler(handler: Handler) None

Collega handler a questo logger.

hasHandlers() bool

Restituisce True se a questo logger è collegato qualsiasi handler.

class logging.Handler(level: int = NOTSET)

Classe base per tutti gli handler. Le sottoclassi implementano emit().

level: int

Il livello di soglia dell’handler.

formatter: 'Formatter | None'

Il Formatter attivo, oppure None.

setLevel(level: int) None

Imposta il livello di soglia dell’handler.

setFormatter(formatter: Formatter) None

Collega formatter a questo handler.

format(record: LogRecord) str

Renderizza record usando il formatter configurato.

close() None

Rilascia le risorse detenute dall’handler. Chiamata da shutdown e da FileHandler quando viene chiuso.

class logging.StreamHandler(stream=None)

Handler che scrive i record formattati, seguiti da self.terminator ("\n" per impostazione predefinita), su stream. stream ha come valore predefinito sys.stderr.

stream

L’oggetto stream di destinazione.

terminator: str

Stringa accodata dopo ogni record formattato. Il valore predefinito è "\n".

emit(record: LogRecord) None

Scrive record su stream se il suo livello soddisfa la soglia dell’handler.

close() None

Esegue il flush dello stream sottostante quando questo espone un metodo flush.

class logging.FileHandler(filename: str, mode: str = 'a', encoding: str = 'UTF-8')

Sottoclasse di StreamHandler che apre filename con i mode ed encoding indicati e vi scrive i record formattati. Il file sottostante viene chiuso con close().

class logging.Formatter(fmt: str | None = None, datefmt: str | None = None)

Renderizza le istanze di LogRecord come stringhe.

fmt è un template in stile printf. Le chiavi riconosciute sono %(name)s, %(message)s, %(msecs)d, %(asctime)s e %(levelname)s. Quando non è impostato, il valore predefinito è "%(levelname)s:%(name)s:%(message)s".

datefmt è il template time.strftime usato per renderizzare %(asctime)s. Il valore predefinito è "%Y-%m-%d %H:%M:%S".

usesTime() bool

Restituisce True se il template di formato fa riferimento a asctime.

formatTime(datefmt: str, record: LogRecord) str | None

Formatta record.ct usando time.strftime e datefmt. Restituisce None sulle piattaforme dove time.strftime non è disponibile.

format(record: LogRecord) str

Renderizza record. Se il template usa asctime, viene invocato prima formatTime() per popolare record.asctime.

class logging.LogRecord

Contenitore per i dati passati da un Logger ai suoi handler. Le istanze vengono popolate tramite set(); le implementazioni dei logger riutilizzano un singolo record per logger per ridurre le allocazioni.

name: str

Il nome del logger di origine.

levelno: int

Livello numerico di questo record.

levelname: str

Nome testuale del livello.

message: str

Il messaggio di log completamente formattato.

ct: float

Ora di creazione come restituita da time.time().

msecs: int

Componente in millisecondi di ct.

asctime: str | None

Timestamp leggibile dall’uomo; popolato in modo lazy da Formatter.

set(name: str, level: int, message: str) None

Inizializza il record con i valori indicati e cattura l’ora corrente.