首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python模块不尊重“30”以下的setLevel (警告)?

Python模块不尊重“30”以下的setLevel (警告)?
EN

Stack Overflow用户
提问于 2015-07-02 18:05:16
回答 1查看 686关注 0票数 2

我有点不知所措。我发誓上周早些时候我就把这件事做好了。今天,我又回到了它,似乎无法开始工作。

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

test.py

代码语言:javascript
复制
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")

输出

代码语言:javascript
复制
Logger currently at level '30'
Testing Warning
Logger currently at level '60'
Logger currently at level '50'
Logger currently at level '40'
Testing Error
Logger currently at level '30'
Logger currently at level '20'
Logger currently at level '10'
Logger currently at level '0'

考虑到我正在使用官方文档来尝试并实现这一点,我不知道为什么日志模块会有所不同。您可以看到在接近尾声时,它是如何公然忽略logger的级别的。我是不是在某种程度上绕过了logger,而是在默认情况下登录呢?我不明白。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 22:33:49

您忘了在记录器中添加一个处理程序。在Python3.3(及更高版本)上,如果没有指定处理程序,则使用具有“最后的处置者”级别的内部WARNING。因此,即使您的消息是通过记录器发送的,它们也会被内部处理程序丢弃(内部处理程序仅用于捕获错误配置)。在Python2.x上,可以将一条一次性消息打印到stderr - No handlers could be found for logger "root"中。

如果你加了一行

代码语言:javascript
复制
logger.addHandler(logging.StreamHandler())

在第一次打印之前,您将得到这样的行为:

代码语言:javascript
复制
Logger currently at level '30'
Testing Warning
Logger currently at level '60'
Logger currently at level '50'
Logger currently at level '40'
Testing Error
Logger currently at level '30'
Logger currently at level '20'
Testing Info
Logger currently at level '10'
Testing Info
Logger currently at level '0'
Testing Info

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31191610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档