practices - python logging disable_existing_loggers
No se encontraron controladores para el registrador (4)
Adicional a la respuesta de
logging.basicConfig()
, llamar a
logging.basicConfig()
es una función conveniente que le proporcionará un
StreamHandler
y un
Formatter
predeterminados.
Eso es suficiente si desea tener rápidamente una funcionalidad de registro.
Puede personalizar su comportamiento pasando
basicConfig
algunos argumentos:
Agregue parámetros útiles : marca de tiempo de salida junto con el mensaje
logger = logging.basicConfig(level=logging.DEBUG,
format=''%(asctime)s - %(name)s - %(levelname)s - %(message)s'')
Esto debería estar bien para la mayoría de las necesidades únicas. Si necesita más control sobre su configuración, puede agregar comportamientos más sofisticados definiendo los atributos del registrador usted mismo.
Ejemplo sofisticado : sin usar la función
basicConfig
import logging
logger = logging.getLogger("mylogger")
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter(''%(asctime)s - %(name)s - %(levelname)s - %(message)s'')
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)
logger.info("Files copied")
logger.warning("disk quota exceeded")
>> 2017-12-06 11:11:12, 090 - mylogger - INFO Files copied
>> 2017-12-06 11:11:12, 091 - mylogger - WARNING disk quota exceeded
El siguiente paso en un entorno más grande sería obtener un nuevo registrador del creado anteriormente, para mantener primero el formato y también para mantener una "jerarquía de registros"
logger2 = logging.getLogger("mylogger.new")
logger2.info("New Logger info")
>> 2017-12-06 11:11:12, 091 - mylogger.new - New logger info
Una buena referencia es el libro de cocina de registro: https://docs.python.org/2/howto/logging-cookbook.html
Soy novato en python. Intenté iniciar sesión en Python y me encontré No se encontraron controladores para el error del registrador al intentar imprimir alguna advertencia a través de la instancia del registrador. A continuación se muestra el código que probé
import logging
logger=logging.getLogger(''logger'')
logger.warning(''The system may break down'')
Y recibo este error No se encontraron controladores para el registrador "logger"
Lo que me confunde es cuando primero intento imprimir una advertencia usando el
logging
y luego a través del
logger
, funciona bien, como
>>> import logging
>>> logging.warning(''This is a WARNING!!!!'')
WARNING:root:This is a WARNING!!!!
>>>
>>> logger.warning(''WARNING!!!!'')
WARNING:logger:WARNING!!!!
¿Alguien puede arrojar algo de luz sobre lo que está sucediendo en el segundo escenario?
Llame a logging.basicConfig () :
>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger(''logger'')
>>> logger.warning(''The system may break down'')
WARNING:logger:The system may break down
Para registrar algún mensaje a través del
logger
, en Python se debe agregar al menos un controlador al objeto
logger
.
Por defecto, las funciones de
debug
,
warn
y otras en el módulo de
logging
llamarán a
basicConfig
que a su vez agregará un
StreamHandler
al
root logger
.
Siempre se recommended agregar el controlador requerido al objeto de registrador que está escribiendo para su módulo.
Puede consultar los documentos oficiales de Python , que tienen un tutorial increíble o puede consultar mejor el código fuente del módulo de registro usted mismo.
Simplemente puede verificar la fuente en Python shell,
import logging
import inspect
print(inspect.getsource(logging))
Finalmente, llamar a
basicConfig
explícitamente resolverá el problema.
import logging
logging.basicConfig()
logger = logging.getLogger(''logger'')
logger.warning(''The system may break down'')
Si obtiene este error al usar
sentry
(
No handlers could be found for logger "sentry.errors"
), podría deberse a un error de centinela para el soporte SNI.
consulte
https://github.com/getsentry/raven-python/issues/523
para obtener más detalles.
Una solución rápida es reemplazar el esquema DSN por
threaded+requests+https
:
RAVEN_CONFIG = {
''dsn'': ''threaded+requests+https://[email protected]/1'',
}