2011-09-03 17 views
6

Googled y se veía en la documentación por defecto, pero no puedo entender por qué esto no produce tres líneas de registro:Python cruzada módulo de registro

# main.py 
import logging 
import apple 
import banana 

log = logging.getLogger('main') 
log.setLevel(logging.DEBUG) 

ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
ch.setFormatter(formatter) 

log.addHandler(ch) 

log.info("I'm in main!") 
    # apple.py 
    import logging 
    
    log = logging.getLogger('main.apple') 
    log.info("I'm here in apple!") 
    
      # banana.py 
      import logging 
      
      log = logging.getLogger('main.banana') 
      log.info("I'm here in banana!") 
      
        # output 
        2011-09-03 16:40:54,062 - main - INFO - I'm in main! 
        

        Pero el example in the logging documentation funciona bien.

        ¿Alguna idea?

        Respuesta

        9

        El controlador (StreamHandler) no se configuró hasta después de las importaciones. Por lo tanto, los comandos de registro en los módulos importados no producen ningún resultado. Algunos manejadores imprimen en archivos, otros se comunican a través de una red y algunos imprimen en una consola. No hay forma de que las instrucciones de registro dentro de los módulos importados puedan saber qué hacer sin que los controladores se agreguen al registrador.

        Si las instrucciones de registro en los módulos residen dentro de una clase o función, como lo hacen en el ejemplo al que se vinculó, se puede ver la salida porque cuando se llama a la clase o función del módulo, el controlador ha sido agregado al registrador.

        Cuestiones relacionadas