logging.basicConfig中设置的级别没有预期的效果

时间:2015-10-06 23:30:50

标签: python logging

Python的logging.basicConfig表现不如我所料。在下面的代码中,即使我已调用logging.warn级别为basicConfig,也会发送包含ERROR的邮件。

import logging

logging.basicConfig(level=logging.ERROR)
root = logging.getLogger()
print("root.level", logging.getLevelName(root.level))
print("Levels for root.handlers: {}".format(
        [logging.getLevelName(handler.level) for handler in root.handlers]))
logging.warn("You're seeing this even though you called basicConfig with level=logging.ERROR")
root.warn("You're seeing this too")

root.setLevel(logging.ERROR)
logging.warn("But you won't see this")

产生的输出是

root.level WARNING
Levels for root.handlers: ['NOTSET']
WARNING:root:You're seeing this even though you called basicConfig with level=logging.ERROR
WARNING:root:You're seeing this too

请注意,一旦我自己调用logging.warn,对root.setLevel的最终调用确实无法按预期生成输出。

如果level的{​​{1}}参数在这个简单的设置中没有效果,它有什么用呢?如果我想控制在这样的简单设置中输出什么级别的消息,是调用logging.basicConfig的首选方法吗?

这是我的版本信息:

root.setLevel

stackoverflow上已经存在几个与此问题相同的问题,但我发现的所有问题实际上都与其他问题有关:

  1. This guy在他已完成日志记录后尝试运行# sys.version = 3.4.3 |Continuum Analytics, Inc.| (default, Mar 6 2015, 12:03:53) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
  2. This question尝试多次调用logging.basicConfig(产生类似于#1的效果)
  3. This question涉及使用儿童记录器

1 个答案:

答案 0 :(得分:1)

使用给定的代码,我无法复制您的问题。相反,输出是预期的。

root.level ERROR
Levels for root.handlers: ['NOTSET']

你有可能在启动时被python调用sitecustomize.pyusercustomize.py吗?这些通常用于提供日志记录设置。

如果根处理程序已经初始化,函数basicConfig根本不执行任何操作。所以,如果你有这样一个文件正在进行设置,那么第二个basicConfig调用将是一个无操作。

尝试使用以下任一方式运行代码:

python3.4 -I 

python2.7 -ES

这些标记有助于隔离您的环境并阻止导入site(然后导入sitecustomize等)。