根记录器忽略记录器级别

3
根记录器在我认为应该记录日志时没有记录:
import logging

# NOTE: I make sure to set the root logger level to logging.DEBUG
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)

logging.debug('This is a debugging test.')

据我理解,这应该记录一些东西,但实际上什么也没发生。快速的谷歌搜索也没有帮助我解决这个问题,官方文档 official documentation 也没有帮助。
另一方面,如果我使用 logging.warning 而不是 logging.debug,它就能正常工作。
我做错了什么?
编辑:
使用 logging.getLogger().getEffectiveLevel() 检查当前级别表明,级别仍然是 30,就像在调用 logging.basicConfig 之前一样。
检查 logging.getLogger().isEnabledFor(logging.DEBUG) 确实告诉我根日志记录器级别未启用 logging.DEBUG

5
您的代码片段有效。可能是因为您在实际代码中的其他位置已经调用了 logging.debug('some text')?这会自动配置根记录器,并且您的 basicConfig 将被忽略。 - SmCaterpillar
@SmCaterpillar 大师真是太棒了!我确实读到过一些关于那方面的内容,但没有完全理解。所以这就是原因!您也可以将其作为答案发表! - jeromej
1
不客气,既然你的回答已经提到了解决方案,实际上并不需要再给出另一个解决方案 :-) - SmCaterpillar
1个回答

5

编辑:原来 OP(我)的问题是因为在调用 logging.basicConfig 之前已经调用了 logging.debug,从而设置了默认配置,导致对 logging.basicConfig 的调用被忽略,正如 @SmCaterpillar 所指出的那样。

尽管如此,这种替代解决方案允许您在已经设置了 basicConfig 后 "强制" 根记录器级别,仍可能有用!


找到了一个 "解决方案":

# […] Previous code

# Sets the root logger level
logging.getLogger().setLevel(logging.DEBUG)

logging.debug('Test')  # Displays 'DEBUG:root:Test'

但它并没有按照我在 logging.basicConfig 中给出的格式执行。

话虽如此,我已经感到满意:这已经算是某种程度的进步了。即使日志没有按照我期望的格式,有日志总比没有日志强。


这真是太令人困惑了。 - forgetso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接