El registrador Python no está imprimiendo mensajes de depuración, aunque está configurado correctamente

Tengo el siguiente código, donde solo quiero jugar con el módulo de registro utilizando contextmanager .

from contextlib import contextmanager import logging @contextmanager def log_level(level, name): logger = logging.getLogger(name) old_level = logger.getEffectiveLevel() print('log_level.old_level: ' + str(old_level)) logger.setLevel(level) print('log_level.new_level: ' + str(logger.getEffectiveLevel())) try: yield logger finally: logger.setLevel(old_level) if __name__ == '__main__': with log_level(logging.DEBUG, 'my-log') as logger: print('__main__.log_level.logger.level: ' + str(logger.getEffectiveLevel())) logger.debug('Debug with logger: will print') logger.warning('Warning') print('__main__.log_level.logger.level: ' + str(logger.getEffectiveLevel())) print('__main__.logger.level: ' + str(logger.getEffectiveLevel())) 

Como se puede ver, dentro del main.log_level, el nivel del registrador debe ser DEBUG y debe imprimir el mensaje ‘Debug with logger: se imprimirá’. Sin embargo, cuando ejecuto el código, este mensaje de depuración no se imprime. Mirando las impresiones del código, dice que el registrador tiene un nivel DEBUG mientras está dentro de log_level, y que el nivel vuelve a ADVERTENCIA cuando sale de log_level. Aquí está mi salida, cuando se ejecuta con python 3:

 log_level.old_level: 30 log_level.new_level: 10 __main__.log_level.logger.level: 10 Warning __main__.log_level.logger.level: 10 __main__.logger.level: 30 

Me gustaría recibir ayuda para comprender por qué logger.debug (‘Debug with logger: will print’) no se imprime.

No ha adjuntado ningún manejador a su registrador. Como resultado, se utiliza un “controlador de último recurso” interno, que solo genera eventos en los niveles de WARNING y superiores. Consulte esta parte de la documentación para ver qué sucede si no se proporciona ninguna configuración de controlador. Si llama a logging.basicConfig() antes de su statement with , aparecerán los mensajes DEBUG .

Tenga en cuenta que los documentos también contienen ejemplos de trabajo de uso de administradores de contexto con el registro.