首页 > 解决方案 > Python 调试记录器未出现在控制台中

问题描述

这让我发疯,我有以下脚本:

#!/usr/bin/env python3


import logging


logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

print(logger.getEffectiveLevel())
print(logger.isEnabledFor(logging.DEBUG))
logger.debug("test") #???

它在运行时输出以下内容:

10
True

为什么我的logger.debug声明没有任何作用???

标签: pythonpython-3.x

解决方案


因为您没有配置任何处理程序。如果没有配置处理程序,日志事件将无处可去。当没有配置处理程序时,如果看到 WARNING 或以上的事件,但您的事件只是在 DEBUG 时,根记录器会自动添加一个处理程序。

试试这个:

>>> import logging
>>> logger = logging.getLogger()  # this is the root logger
>>> logger.handlers
[]
>>> logging.basicConfig(level=logging.DEBUG)
>>> logger.handlers
[<StreamHandler <stderr> (NOTSET)>]
>>> logger.debug('test')
DEBUG:root:test

如果您没有另外指定,基本配置将添加一个StreamHandler写入。sys.stderr

在这一点上,我邀请您考虑使用比 stdlib 日志记录更合理的默认值的第 3 方日志记录框架。

>>> import structlog
>>> logger = structlog.get_logger()
>>> logger.debug("test message", key1='val1', key2='val2')
2018-07-23 13:13.28 test message                   key1=val1 key2=val2

推荐阅读