修改Python文件配置的日志记录器级别

4

我已经从文件中配置了一个记录器,并希望在不必更改.conf文件的情况下更改日志记录级别,而是使用内联代码;

import logging.config

logging.config.fileConfig('..\\LoggingConfig\\loggingfile.conf')

logging.StreamHandler.setLevel(logging.info)

logging.debug("Debug")
logging.info("Info")

这应该只会在屏幕上打印“Info”日志行。我不知道在哪个对象上调用setLevel()!logging.StreamHandler.setLevel(logging.info)只是在搜索了30分钟后的一次尝试... loggingfile.conf文件;
[loggers]
keys=root

[logger_root]
handlers=screen
level=NOTSET

[formatter_modfunc]
format=%(module)-20s  %(funcName)-25s %(levelno)-3s: %(message)s

[handlers]
keys=screen

[handler_screen]
class=StreamHandler
formatter=modfunc
level=DEBUG
args=(sys.stdout,)
qualname=screen
2个回答

7
您需要在您的Logger实例上调用setLevel方法。
LOGGER = logging.getLogger('your.module.file.name')
LOGGER.setLevel(_level)
LOGGER.info('foo')

如果您只使用基本记录器,可以这样做。
logging.basicConfig(level=_level)
logging.info('foo')

请参见http://docs.python.org/howto/logging.html

1
太好了,这就做到了,我需要知道如何获取实例,使用loggerInstance = logging.getLogger(__name__),谢谢! - Marcus Jones
很高兴我能帮到你 :) - cfedermann

6

当使用logging.config.fileConfig时,如果您想要一次动态更改所有子记录器的级别,您可以...

a) 设置根记录器(logging.getLogger)的级别:

logging.getLogger().setLevel(logging.WARNING)
b) 禁用其他级别

logging.disable(logging.INFO)

我尝试过的所有方法都失败了。只有这个答案(不幸的是没有被标记为正确答案)对我有效。由于某种原因,如果你执行basicConfig,然后稍后再执行另一个basicConfig,后者不会改变日志记录级别。只有这种方法才能进行后续更改。但愿我知道为什么。 - philo vivero
调用basicConfig()函数应该在调用debug()、info()等函数之前。由于它是一个一次性的简单配置工具,只有第一次调用实际上会做任何事情:随后的调用实际上是无操作的。 - Egor Kraev

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