我有下面的代码,我只想使用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()))可以看到,在main.log_level内部,记录器级别应该进行调试,并且应该打印消息'Debug with logger: will print‘。但是,当我运行代码时,此调试消息不会打印。查看代码的输出,它表明记录器在log_level中具有调试级别,并且级别在退出log_level时返回到警告。这里是我的输出,当使用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我想了解一下为什么logger.debug('Debug with logger: will print')没有打印。
https://stackoverflow.com/questions/44312978
复制相似问题