【问题标题】:How do I set the Python log level?如何设置 Python 日志级别?
【发布时间】:2020-05-11 17:34:54
【问题描述】:

运行这个

import logging

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

logger.warning("warning")
logger.info("info")
logger.debug("debug")

只打印“警告”。我希望它打印所有三个消息。我做错了什么?

我知道这应该是世界上最基本的东西,但这让我很困惑,而且 Python 文档在这一点上令人困惑。

【问题讨论】:

标签: python logging


【解决方案1】:

您从未调用过logging.basicConfig()(或类似名称)来建立任何处理程序。因此,对logger.warning 的调用会为您调用它,这会将日志记录级别重置为logging.WARNING。 (从技术上讲,文档只提到了模块级函数logging.warning 等。为您调用logging.basicConfig,所以我不知道这种解释是否完全正确。但是,调用basicConfig 确实可以解决问题。 )

import logging

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

logger.warning("warning")
logger.info("info")
logger.debug("debug")

【讨论】:

  • 该文档令人困惑,因为它跳过了记录器自定义的细节,而没有将最小的模块级示例放在前面。结果,我对“logging”和“logger”之间的区别变得模糊了。
  • 模块creates an instance of Logging 用作根记录器。 logging.getLogger 返回一个从该根记录器“继承”的实例,以及模块级函数 logging.warning 等。只是在根记录器周围的wrappers 调用其warning 方法。
  • 但是即使知道这一点,我也不清楚当您在没有首先创建任何处理程序的情况下调用该方法时会发生什么。
【解决方案2】:

询问后我几乎立刻就想到了这一点。

import logging

logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)

logging.warning("warning")
logging.info("info")
logging.debug("debug")

该文档令人困惑,因为它跳入了记录器自定义的细节,而没有将最小的模块级示例放在前面。希望这篇文章可以帮助纠正这个问题。

这与Set logging levels 本质上是相同的问题,但我将保留我的答案,因为它比那里的问题略小。

【讨论】:

  • “文档令人困惑,因为它涉及到记录器定制的细节”? basicConfig() 字面上是 HOWTO 文档中的第二个代码 sn-p:docs.python.org/3/howto/logging.html#logging-to-a-file 和参考文档中的第三段说“该模块提供了很多功能和灵活性。如果您不熟悉日志记录,最好的方法要掌握它,请查看教程(请参阅右侧的链接)。”带有指向 HOWTO 教程的链接。
猜你喜欢
  • 2015-08-03
  • 2023-03-24
  • 2015-12-17
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多