首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python记录器没有打印调试消息,尽管它的设置正确。

Python记录器没有打印调试消息,尽管它的设置正确。
EN

Stack Overflow用户
提问于 2017-06-01 16:39:53
回答 1查看 14.8K关注 0票数 17

我有下面的代码,我只想使用contextmanager来处理日志模块。

代码语言:javascript
复制
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执行时:

代码语言:javascript
复制
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')没有打印。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 17:18:08

你没有把任何处理程序附加到你的记录器上。因此,使用了内部“最后的处理程序”,它只输出WARNING及以上级别的事件。请参阅文档的这部分,查看如果没有提供处理程序配置会发生什么。如果在logging.basicConfig()语句之前调用with,则应该会出现DEBUG消息。

请注意,文档还包含使用上下文管理器进行日志记录的工作实例

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44312978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档