2011-08-10 9 views
33

En un script de python que estoy escribiendo, estoy intentando registrar eventos utilizando el módulo de registro. Tengo el siguiente código para configurar mi registrador:Registro de Python que no da como resultado nada

ERROR_FORMAT = "%(levelname)s at %(asctime)s in %(funcName)s in %(filename) at line %(lineno)d: %(message)s" 
DEBUG_FORMAT = "%(lineno)d in %(filename)s at %(asctime)s: %(message)s" 
LOG_CONFIG = {'version':1, 
       'formatters':{'error':{'format':ERROR_FORMAT}, 
          'debug':{'format':DEBUG_FORMAT}}, 
       'handlers':{'console':{'class':'logging.StreamHandler', 
            'formatter':'debug', 
            'level':logging.DEBUG}, 
          'file':{'class':'logging.FileHandler', 
            'filename':'/usr/local/logs/DatabaseUpdate.log', 
            'formatter':'error', 
            'level':logging.ERROR}}, 
       'root':{'handlers':('console', 'file')}} 
logging.config.dictConfig(LOG_CONFIG) 

Cuando trato de ejecutar logging.debug("Some string"), no consigo ninguna salida en la consola, a pesar de que dice que this page in the docslogging.debug deben tener la salida de registrador de la raíz del mensaje. ¿Por qué mi programa no genera nada y cómo puedo solucionarlo?

Respuesta

54

El nivel de registro predeterminado es de advertencia. Como no ha cambiado el nivel, el nivel del registrador de raíz sigue siendo una advertencia. Eso significa que ignorará cualquier registro con un nivel inferior a la advertencia, incluidos los registros de depuración.

Esto se explica en el tutorial:

import logging 
logging.warning('Watch out!') # will print a message to the console 
logging.info('I told you so') # will not print anything 

La línea 'info' no imprime nada, porque el nivel es más alto que información.

Para cambiar el nivel, acaba de establecer que en el registrador de la raíz:

'root':{'handlers':('console', 'file'), 'level':'DEBUG'} 

En otras palabras, no es suficiente para definir un controlador de nivel = DEBUG, el nivel de registro actual también debe ser de depuración con el fin para que produzca algo

+0

La documentación dice que es su nivel predeterminado es NOTSET que es un nivel de 0 que debería dar como resultado todo ... ¿Por qué no es así? – Ben

+0

@Ben ¿dónde dice eso? Todo lo que puedo ver es "El nivel predeterminado es ADVERTENCIA, lo que significa que solo se rastrearán los eventos de este nivel y superiores, a menos que el paquete de registro esté configurado para hacer lo contrario". –

+0

https://docs.python.org/3.6/library/logging.html#logging.Logger.setLevel – Ben

Cuestiones relacionadas