Python日志可以';t更改根记录器的日志级别

Python日志可以';t更改根记录器的日志级别,python,python-3.x,logging,Python,Python 3.x,Logging,我正在尝试更改根记录器的日志级别。当使用getEffectiveLevel()查询时,它似乎会发生更改,但实际上不会记录任何与更改前不同的内容 例如: >>> import logging >>> root_logger = logging.getLogger() >>> root_logger.getEffectiveLevel() 30 >>> root_logger.warning('test') test >&

我正在尝试更改根记录器的日志级别。当使用
getEffectiveLevel()
查询时,它似乎会发生更改,但实际上不会记录任何与更改前不同的内容

例如:

>>> import logging
>>> root_logger = logging.getLogger()
>>> root_logger.getEffectiveLevel()
30
>>> root_logger.warning('test')
test
>>> root_logger.info('test')
>>> root_logger.setLevel(logging.DEBUG)
>>> root_logger.getEffectiveLevel()
10
>>> root_logger.warning('test')
test
>>> root_logger.info('test')
>>> root_logger.debug('test')
为什么会这样?我是否错过了我需要做的其他事情?让我困惑的是,我可以设置级别并使用
getEffectiveLevel
查看它,但它根本不会改变行为


我正在使用Python 3.7.3上的内置日志模块(版本0.5.1.2)。

您尚未为日志程序(或日志系统)配置任何处理程序


这意味着,基于,
日志记录
默认为最后一个记录器,这是一个具有
警告
阈值的stderr记录器,因此,它不会处理这些调试消息。

您可能还需要调整处理程序级别,也许还有一些我忘记了的东西。我理解它是如何解决默认日志处理程序的。让我困惑的是,为什么
setLevel
没有更改级别,即使
getEffectiveLevel
说它已经更改了。是否需要从
root\u logger
获取默认处理程序,然后更改默认处理程序的级别?以您的示例为例,
root\u logger.handlers
将生成
[]
。没有配置任何处理程序,但是
日志记录
模块有一个最后的处理程序(请参阅链接的代码!),因此关键消息不会完全丢失。请使用例如
logging.basicConfig(级别=logging.WARNING)
在根记录器上配置非最后手段处理程序。您知道为什么
getEffectiveLevel
报告设置的级别吗?似乎即使我依赖于最后的处理程序,
setLevel
也应该像您期望的那样设置日志级别
getEffectiveLevel
setLevel
同意,但最后的处理程序似乎没有相应的行为。记录器本身已配置为该级别--尝试将其设置为更高级别,例如
root\u logger.setLevel(logging.ERROR)
并发出警告;当记录器过滤掉该警告时,不会发出该警告。处理程序有自己的级别过滤器设置;您可能希望电子邮件发送处理程序只处理错误消息,但无论如何都要附加到根记录器。