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上已经存在几个与此问题相同的问题,但我发现的所有问题实际上都与其他问题有关:
# 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)]
logging.basicConfig
(产生类似于#1的效果)答案 0 :(得分:1)
使用给定的代码,我无法复制您的问题。相反,输出是预期的。
root.level ERROR
Levels for root.handlers: ['NOTSET']
你有可能在启动时被python调用sitecustomize.py
或usercustomize.py
吗?这些通常用于提供日志记录设置。
如果根处理程序已经初始化,函数basicConfig
根本不执行任何操作。所以,如果你有这样一个文件正在进行设置,那么第二个basicConfig
调用将是一个无操作。
尝试使用以下任一方式运行代码:
python3.4 -I
或
python2.7 -ES
这些标记有助于隔离您的环境并阻止导入site
(然后导入sitecustomize
等)。