如何在Python中设置日志级别?

5

我有以下完整的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()

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

如何规避此错误?


你需要使用 logging.basicConfig() - Gino Mempin
https://dev59.com/iFgQ5IYBdhLWcg3wORVJ - Himaprasoon
那么 https://dev59.com/f2Ei5IYBdhLWcg3wndZw 是错误的吗? - Alex
根据你所指向的问题,你需要定义一个处理程序。BasicConfig是一种快速实现的方法。你所提到的问题是否有误包括了几个额外的步骤,而你还没有完成其中的定义处理程序这一步骤。 - Kemp
2个回答

10

你应该将 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 的一个错误吗? - Alex
1
不,这是有意为之的,我无法真正解释为什么他们选择了这条路,但这就是它的工作方式。最佳实践是使用类似于 logging.basicConfig(level=os.environ[...]) 的东西,并从某些环境变量中获取进程的日志记录级别。 - bluesummers
那么方法 setLevel 是不必要的。这是一个错误。 - Alex
1
你误解的接口和有缺陷的接口是不同的。 - Kemp
那我还是误解了它。 - Alex
显示剩余4条评论

3
使用 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 吗? - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接