Python – logging su file e console

Per seguire al meglio il corso d’esecuzione di un programma in python e scovarne bug e potenziali difetti servono i log. Sono una parte essenziale del processo di sviluppo, e non possono essere assolutamente affidati al semplice “print” su console.

Python offre strumenti di logging su file e console semplicissimi da configurare. In questo articolo, andremo a creare un file di configurazione per gestire il logging sia su console che su file, poi lo caricheremo nella nostra applicazione di test e . . . speriamo funzioni!

La libreria che utilizziamo è standalone in python 3, si chiama logging. Importiamola insieme al modulo per la configurazione via file:

Per caricare un file di configurazione, che in questo caso ho chiamato ‘log_config.ini‘, basta una riga:

Ovviamente, prima di essere importato, questo file va creato. Nella root folder del nostro software creiamo un file di testo con nome log_config.ini. Proviamo una configurazione che stampi i log in console e li scriva nel contempo su un file, da consultare o dare in pasto ad altri software di analisi.

Per prima cosa dichiariamo di voler utilizzare due handlers per i log: lo stream_handler per l’output in console e il file_handler per l’output su file. Successivamente dichiariamo un formatters, che utilizzeremo per indicare come scrivere i dati. All’interno del blocco logger_root indichiamo che i log a partire dal livello DEBUG verranno affidati ad entrambi gli handlers appena dichiarati.

 

Adesso viene la parte interessante, per ogni handler dichiariamone la classe, il livello, il formatter ed eventuali parametri di configurazione agiuntivi. Quelle che vedete sono le configurazioni di base di un handler per la console e un altro che scriverà i log all’interno del file logs, sempre nella root folder dell’applicativo.

 

Infine indichiamo come formattare il testo in modo da renderlo facilmente legibile. In questo caso la riga conterrà indicando nome del logger, il livello dell’avviso e il relativo messaggio.

 

La maggior parte del lavoro è fatto, ci manca solo una funzione che generi dei log di test:

 

La cosa migliore ora è vedere il codice in funzione. Lo trovi sul mio account repl.it pronto per essere eseguito.

 

 

Come sempre la documentazione è essenziale per andare oltre questo semplice esempio, se vuoi utilizzare in produzione il logging su file di python dai un’occhiata qui:

Logging HOWTO
Logging Cookcook
logging.config docs