Ho un piccolo progetto Python che ha la seguente struttura:
Project
-- pkg01
-- test01.py
-- pkg02
-- test02.py
-- logging.conf
Ho intenzione di utilizzare il modulo di registrazione predefinito per stampare i messaggi su stdout e un file di registro. Per utilizzare il modulo di registrazione, è necessaria un'inizializzazione:
import logging.config
logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')
logger.info('testing')
Al momento, eseguo questa inizializzazione in ogni modulo prima di iniziare a registrare i messaggi. È possibile eseguire questa inizializzazione solo una volta in una posizione tale da riutilizzare le stesse impostazioni registrandosi in tutto il progetto?
package/__init__.py
. Normalmente non è il posto in cui hai inserito il if __name__ == '__main__'
codice. Inoltre, l'esempio di prost sembra che chiamerà il codice di configurazione incondizionatamente all'importazione, il che non mi sembra giusto. In genere, la registrazione del codice di configurazione deve essere eseguita in un unico punto e non dovrebbe verificarsi come effetto collaterale dell'importazione, tranne quando si importa __main__.
if __name__ == '__main__'
? (Non è menzionato esplicitamente in questione se questo è il caso)
fileConfig
tutti i moduli che effettuano la registrazione, a meno che non si abbia laif __name__ == '__main__'
logica in tutti. La risposta di prost non è una buona pratica se il pacchetto è una libreria, anche se potrebbe funzionare per te - non si dovrebbe configurare la registrazione nei pacchetti della libreria, se non quello di aggiungere unNullHandler
.