【问题标题】:Python debug logger doesn't appear in consolePython 调试记录器未出现在控制台中
【发布时间】:2018-07-24 02:18:45
【问题描述】:

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

#!/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 语句没有任何作用???

【问题讨论】:

  • 为什么我的logger.debug 声明没有做任何事情???你这是什么意思?
  • @scharette 我的意思是它没有输出任何东西,这是我所期望的。

标签: python python-3.x


【解决方案1】:

因为您没有配置任何处理程序。如果没有配置处理程序,日志事件将无处可去。当没有配置处理程序时,如果看到 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

此时,我邀请您考虑a 3rd-party logging framework,它具有比 stdlib 日志记录更合理的默认值。

>>> 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

【讨论】:

  • 谢谢。文档对此非常不清楚。我的印象是调用getLogger 函数 获得根记录器,所以我可以自己使用logging.getLogger().setLevel(logging.DEBUG) 设置根记录器的级别。需要明确的是,情况并非如此,我得到的不是根记录器?此外,如果您的答案包含一个完全完整的解决方案,即包含所使用对象的导入和设置,我将不胜感激。
  • 好的,在这种情况下,如果您添加 import logginglogger = logging.getLogger(),我仍然准备接受您的回答,但如果您也能弄清楚我为什么要这样做,那就太好了没有工作。
  • 我已经厌倦了弄清楚为什么 stdlib 日志记录在一半的时间里不起作用。如果可以,请使用第 3 方,有很多不错的选择(结构日志、日志、鞋拔...)
猜你喜欢
  • 2019-02-11
  • 2017-04-10
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多