需要澄清的几件事:
>>> import logging
logging.root.handlers []
好的,但是您发现了问题:将日志记录级别设置DEBUG
为时,根记录器无法正常工作。调试消息将被忽略。对于未配置的相同根记录器,警告消息将正常输出。这是为什么?
请记住,我们目前没有任何用于root记录程序的处理程序。但是看一下代码,我们确实看到:
if (found == 0):
if lastResort:
if record.levelno >= lastResort.level:
lastResort.handle(record)
elif raiseExceptions and not self.manager.emittedNoHandlerWarning:
sys.stderr.write("No handlers Could be found for logger"
" \"%s\"\n" % self.name)
self.manager.emittedNoHandlerWarning = True
这意味着,lastResort
如果找不到处理程序,我们将提供一个for备份。您可以参考的定义lastResort
,它以日志记录级别初始化WARNING
。同时,调试消息没有备份,因此在未设置处理程序时将忽略它们。
对于您的问题:
Logger.isEnabledFor(lvl)
指示此记录器是否将处理严重性为lvl的消息。此方法首先检查由logging.disable(lvl)设置的模块级别级别,然后检查由getEffectiveLevel()确定的记录器的有效级别。
您应该做的是,使用logging.basicConfig()
它为根记录程序设置默认处理程序,并根据记录程序级别和消息级别输出消息。