python - 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
声明没有任何作用???
解决方案
因为您没有配置任何处理程序。如果没有配置处理程序,日志事件将无处可去。当没有配置处理程序时,如果看到 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
推荐阅读
- adobe-illustrator - 有没有办法使用脚本在 Adobe illustrator 的图层中更改 groupItems 的 RGB 值?
- python - 如果我将 f 字符串存储在 for 循环内的变量中,该变量会获取 for 循环内的所有值吗?
- excel - Textbox2 值与当前代码在同一行
- python - 时间序列和配置选择的线性回归
- cypress - 如果 afterEach-block 中出现问题,则仅重试 it- 和 afterEach-block
- reactjs - 单击新图标后,如何让我的图标恢复到以前的颜色?
- tomcat - 如何为tomcat创建一个redmine webapp
- angular - 带有 BehaviorSubject 的 Angular asyncValidator
- wordpress - Wordpress 商店 - 向供应商发送 Viber 消息
- vue.js - v-if 切换所有项目而不是唯一单击的项目