以下代码是从文档中复制的。我应该能够看到所有的信息日志。但我没有。即使我已将 setLevel 设置为 INFO,我也只能看到警告及以上警告。
为什么会这样? foo.py
:
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
输出:
workingDirectory$ python foo.py
warn message
error message
critical message
信息和调试消息去哪儿了??
原文由 meh 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如一些用户所指出的,使用:
就像在接受的答案中写的那样不是一个好的选择,因为它 设置了根记录器的日志级别,因此它可能会导致意外行为(例如,如果您设置第三方库可能会开始记录调试消息
loglevel=logging.DEBUG
)在我看来,最好的解决方案是为您的记录器设置日志级别,如下所示:
不是真正直观的解决方案,但如果您只想为“MyLogger”设置日志级别并保持根记录器不变,则这是必需的。
那么,为什么
logging.basicConfig(level=logging.DEBUG, format='%(message)s')
全局设置日志级别?好吧,实际上它没有。如前所述,它只是更改根记录器的配置,并且如 python 文档 中所述:
因此,
logging.basicConfig
正在创建一个带有默认 Formatter 的 StreamHandler 并将其添加到根记录器。关键是,如果任何其他库正在使用“根记录器”,您也将为该库设置该日志级别,这样您就可能开始看到来自第三方库的调试日志。
这就是为什么我认为最好创建您自己的记录器并设置您自己的格式化程序和处理程序,这样您就可以保持根记录器不变。