Python日志记录模块不考虑低于“30”的setLevel(警告)?

2024-04-16 05:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点不知所措。我可以发誓我上星期早些时候做过这个。今天我又回到了它,似乎不能让日志工作。在

在下面的示例脚本中,我希望展示我的问题的相对完整的演示。在

测试.py

import logging
logger = logging.getLogger()
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.warning("Testing Warning")
logger.setLevel(60)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.error("Testing Error")
logger.setLevel(50)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.error("Testing Error")
logger.setLevel(40)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.error("Testing Error")
logger.setLevel(30)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.info("Testing Info")
logger.setLevel(20)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.info("Testing Info")
logger.setLevel(10)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.info("Testing Info")
logger.setLevel(0)
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel()))
logger.info("Testing Info")

输出

^{pr2}$

考虑到我正在使用this官方文档来尝试实现这一点,我不知道为什么日志模块会有不同的行为。您可以在结尾处看到它是如何公然忽略logger的级别。我是不是在某种程度上绕过了logger而改为使用默认值进行日志记录?我不明白。在

谢谢!在


Tags: infoformatloggingerrorloggertestinglevelat
1条回答
网友
1楼 · 发布于 2024-04-16 05:22:15

您忘了向日志程序添加处理程序。在Python3.3(及更高版本)上,如果没有指定处理程序,则使用内部的"handler of last resort",它的级别为WARNING。因此,即使您的消息是通过记录器发送的,它们也会被内部处理程序丢弃(这只是为了捕捉错误配置)。在python2.x上,您将得到一条一次性消息打印到stderr-No handlers could be found for logger "root"。在

如果你加一行

logger.addHandler(logging.StreamHandler())

首先,你会得到这样的行为:

^{pr2}$

更新:不需要“手动添加处理程序”—这只是说明问题所在的最简单方法。您可以使用basicConfig()来简单地配置日志(控制台或文件,有限的选项),或者使用^{}来更灵活地配置。这些方法在Python2.7和3.2(及更高版本)中的工作方式相同。在

相关问题 更多 >