La registrazione è un mezzo per tenere traccia degli eventi che si verificano durante l'esecuzione di alcuni software. La registrazione è importante per lo sviluppo, il debug e l'esecuzione del software. Se non disponi di alcun record di registrazione e il tuo programma si blocca, ci sono pochissime possibilità di rilevare la causa del problema. E se rilevi la causa, ci vorrà molto tempo. Con la registrazione è possibile lasciare una scia di breadcrumb in modo che, se qualcosa va storto, possiamo determinare la causa del problema.
Ci sono una serie di situazioni come se ti aspettassi un numero intero, ti è stato dato un float e puoi una nuvola API , il servizio è inattivo per manutenzione e molto altro ancora. Tali problemi sono fuori controllo e sono difficili da determinare.
Perché l'istruzione print non è Pythonic
Alcuni sviluppatori utilizzano il concetto di stampare le istruzioni per verificare se le istruzioni sono state eseguite correttamente o se si è verificato qualche errore. Ma stampare non è una buona idea. Potrebbe risolvere i tuoi problemi con script semplici, ma con script complessi l'approccio di stampa fallirà.
Python ha un modulo integrato registrazione che consente di scrivere messaggi di stato su un file o su qualsiasi altro flusso di output. Il file può contenere informazioni su quale parte del codice viene eseguita e quali problemi sono sorti.
Livelli di registrazione Python
Esistono cinque livelli integrati del messaggio di registro.
- Debug: Questi vengono utilizzati per fornire informazioni dettagliate, generalmente interessanti solo durante la diagnosi dei problemi.
- Informazioni: Questi vengono utilizzati per confermare che le cose funzionano come previsto
- Avvertimento: Questi vengono utilizzati come indicazione che è successo qualcosa di inaspettato o che indica qualche problema nel prossimo futuro
- Errore: Ciò indica che a causa di un problema più serio, il software non è stato in grado di eseguire alcune funzioni
- Critico: Questo indica un errore grave, indicando che il programma stesso potrebbe non essere in grado di continuare a funzionare
Se necessario, gli sviluppatori hanno la possibilità di creare più livelli, ma questi sono sufficienti per gestire ogni situazione possibile. Ad ogni livello integrato è stato assegnato il suo valore numerico.

Il modulo di registrazione è ricco di numerose funzionalità. Ha diverse costanti, classi e metodi. Gli elementi con tutte le maiuscole sono costanti, gli elementi in maiuscolo sono classi e gli elementi che iniziano con lettere minuscole sono metodi.
Esistono diversi oggetti logger offerti dallo stesso Handler di base.
- Logger.info(messaggio): Ciò registrerà un messaggio con il livello INFO su questo logger.
- Logger.avviso(msg): Ciò registrerà un messaggio con un livello di ATTENZIONE su questo registratore.
- Errore.logger(msg): Ciò registrerà un messaggio con livello ERROR su questo logger.
- Logger.critical(msg): Ciò registrerà un messaggio con livello CRITICO su questo logger.
- Logger.log(lvl,msg): Questo registrerà un messaggio con livello intero lvl su questo logger.
- Logger.eccezione(msg): Ciò registrerà un messaggio con livello ERROR su questo logger.
- Logger.setLevel(lvl): Questa funzione imposta la soglia di questo logger su lvl. Ciò significa che tutti i messaggi al di sotto di questo livello verranno ignorati.
- Logger.addFilter(filtro): Ciò aggiunge un filtro specifico inserito in questo logger.
- Logger.removeFilter(filtro): Ciò rimuove un filtro specifico inserito in questo logger.
- Logger.filter(record): Questo metodo applica il filtro del logger al record fornito e restituisce True se il record deve essere elaborato. Altrimenti restituirà False.
- Logger.addHandler(hdlr): Ciò aggiunge un gestore hdlr specifico a questo logger.
- Logger.removeHandler(hdlr): Ciò rimuove un gestore hdlr specifico in questo logger.
- Logger.hasHandlers(): Questo controlla se il logger ha qualche gestore configurato o meno.
Gestori utili
Oltre alla classe Handler di base, vengono fornite molte utili sottoclassi.
| Gestore | Descrizione |
|---|---|
| StreamHandler | Invia messaggi ai flussi (oggetti simili a file). |
| FileHandler | Invia messaggi ai file su disco. |
| BaseRotatingHandler | Classe base per gestori che ruotano i file di log a un certo punto. Utilizzo RotatingFileHandler O TimedRotatingFileHandler Invece. |
| RotatingFileHandler | Invia messaggi ai file su disco, con supporto per le dimensioni massime dei file di registro e la rotazione dei file di registro. |
| TimedRotatingFileHandler | Invia messaggi ai file su disco, ruotando il file di registro a determinati intervalli temporizzati. |
| SocketHandler | Invia messaggi ai socket TCP/IP. Supporta anche socket di dominio Unix a partire da Python 3.4. |
| DatagramHandler | Invia messaggi ai socket UDP. Supporta anche socket di dominio Unix a partire da Python 3.4. |
| SMTPHandler | Invia messaggi a un indirizzo email designato. |
| SysLogHandler | Invia messaggi a un demone Unix Syslog, possibilmente su una macchina remota. |
| NTEventLogHandler | Invia messaggi a un registro eventi di Windows NT/2000/XP. |
| MemoryHandler | Invia messaggi a un buffer in memoria, che viene svuotato ogni volta che vengono soddisfatti criteri specifici. |
| HTTPHandler | Invia messaggi a un server HTTP utilizzando la semantica GET o POST. |
| WatchedFileHandler | Controlla il file a cui sta accedendo. Se il file cambia, viene chiuso e riaperto utilizzando il nome del file. |
| QueueHandler | Invia messaggi a una coda, come quelli implementati nella coda o nei moduli multiprocessing. |
| NullHandler | Non fa nulla con i messaggi di errore. Utilizzato dagli sviluppatori di librerie per evitare il messaggio 'Nessun gestore trovato per il logger'. |
Nozioni di base sulla registrazione Python
Le basi per utilizzare il modulo di registrazione per registrare gli eventi in un file sono molto semplici. Per questo, importa semplicemente il modulo dalla libreria.
- Creare e configurare il logger. Può avere diversi parametri. Ma soprattutto, passa il nome del file in cui vuoi registrare gli eventi.
- Qui è possibile impostare anche il formato del logger. Per impostazione predefinita, il file funziona in aggiungere mode ma possiamo cambiarlo in modalità scrittura, se necessario.
- Inoltre, è possibile impostare il livello del logger che funge da soglia per il tracciamento in base ai valori numerici assegnati a ciascun livello.
Esistono diversi attributi che possono essere passati come parametri. - L'elenco di tutti questi parametri è riportato in Libreria Python . L'utente può scegliere l'attributo richiesto in base al requisito.
Successivamente, crea un oggetto e utilizza i vari metodi come mostrato nell'esempio.
Registrazione di una variabile
Questo codice illustra come registrare un messaggio di errore. La funzione logging.error() viene utilizzata per registrare un messaggio di errore con un segnaposto %s per il nome della variabile.
Python3
import> logging> name>=> 'GFG'> logging.error(>'%s raised an error'>, name)> |
>
protocolli del livello di collegamento dati
>
Produzione :
ERROR:root:GFG raised an error>
Registrazione di tutti i livelli
Questo codice illustra tutti i livelli di registrazione.
Pitone
# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename>=>'newfile.log'>,> >format>=>'%(asctime)s %(message)s'>,> >filemode>=>'w'>)> # Creating an object> logger>=> logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(>'Harmless debug Message'>)> logger.info(>'Just an information'>)> logger.warning(>'Its a Warning'>)> logger.error(>'Did you try to divide by zero'>)> logger.critical(>'Internet is down'>)> |
>
>
Il codice sopra genererà un file con il nome fornito e se apriamo il file, il file contiene i seguenti dati.
Configurazione della registrazione
Registrazione su un file: temp.conf
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler]>
Esempio:
Il codice imposta un sistema di registrazione utilizzando la configurazione da temp.conf file. Ottiene un logger denominato semplice esempio e registra i messaggi con vari livelli di registro.
Python3
quanti film mission impossibili ci sono
note a piè di pagina del ribasso
import> logging> import> logging.config> logging.config.fileConfig(>'temp.conf'>)> # create logger> logger>=> logging.getLogger(>'simpleExample'>)> # 'application' code> logger.debug(>'debug message'>)> logger.info(>'info message'>)> logger.warning(>'warn message'>)> logger.error(>'error message'>)> logger.critical(>'critical message'>)> |
>
>
Produzione :
2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message>
Eccezione di registrazione Python
La generazione di eccezioni durante la registrazione può essere utile in determinati scenari per indicare condizioni eccezionali o errori nell'applicazione. Sollevando un'eccezione, puoi interrompere il normale flusso di esecuzione e notificare al chiamante o al sistema di registrazione il problema riscontrato.
In questo codice stiamo sollevando un'eccezione che viene rilevata dalla registrazione. eccezione.
Python3
import> logging> logging.basicConfig(level>=>logging.DEBUG,> >format>=>'%(asctime)s - %(levelname)s - %(message)s'>)> def> perform_operation(value):> >if> value <>0>:> >raise> ValueError(>'Invalid value: Value cannot be negative.'>)> >else>:> ># Continue with normal execution> >logging.info(>'Operation performed successfully.'>)> try>:> >input_value>=> int>(>input>(>'Enter a value: '>))> >perform_operation(input_value)> except> ValueError as ve:> >logging.exception(>'Exception occurred: %s'>,>str>(ve))> |
>
>
Produzione :
Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.>