【问题标题】:How to set logging level in python?如何在python中设置日志记录级别?
【发布时间】:2023-03-24 08:25:01
【问题描述】:

我有以下完整的python(3.8.5)代码示例

import logging
L = logging.getLogger(__name__)

def main():
    L.setLevel(logging.DEBUG)
    L.warning("This is warn")
    L.info("This is info")
    L.debug("This is debug")

if __name__ == "__main__":
    main()

应该打印出所有三个短语,但只打印第一个(用于警告)。

如何规避这个错误?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您应该将L.setLevel 切换为logging.basicConfig(level=...)

例如:

def main():
    logging.basicConfig(level=logging.DEBUG)
    L.warning("This is warn")
    L.info("This is info")
    L.debug("This is debug")

您使用的方法,专门为此记录器设置日志记录级别,这意味着特定记录器在登录较低级别时实际上不会做任何事情 - 它与进程的日志记录级别和打印无关。使用logging.basicConfig 可以配置进程的日志记录级别,因此即使您有多个记录器,此级别也将确定哪些日志消息来自进程。

【讨论】:

  • 原来是python的bug?
  • 不,这是故意的,我无法解释他们为什么选择这条路,但这就是它的工作原理。最佳做法是使用 logging.basicConfig(level=os.environ[...]) 之类的东西,并从某个环境变量中获取进程的日志记录级别
  • 那么方法setLevel就不需要了。这是一个错误。
  • 你误解的界面和有bug的界面是不一样的。
  • 那我还是误会了
【解决方案2】:

使用logging.basicConfig

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

def main():
    L.warning("This is warn")
    L.info("This is info")
    L.debug("This is debug")

if __name__ == "__main__":
    main()

【讨论】:

  • 所以这是python的一个bug?
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多