Python 正确使用nullHandler禁用来自特定包的日志消息
我想停止一个外部模块来淹没我的日志文件,如以下问题所示: 下面是受答案启发的配置文件。我使用python3.2 我的问题是,它不起作用:行“handlers=nullHandler”引发了以下问题:Python 正确使用nullHandler禁用来自特定包的日志消息,python,logging,config-files,Python,Logging,Config Files,我想停止一个外部模块来淹没我的日志文件,如以下问题所示: 下面是受答案启发的配置文件。我使用python3.2 我的问题是,它不起作用:行“handlers=nullHandler”引发了以下问题: Traceback (most recent call last): File "./tree_browser", line 44, in <module> logging.config.fileConfig('../log/logging.conf') File "/u
Traceback (most recent call last):
File "./tree_browser", line 44, in <module>
logging.config.fileConfig('../log/logging.conf')
File "/usr/lib/python3.2/logging/config.py", line 79, in fileConfig
_install_loggers(cp, handlers, disable_existing_loggers)
File "/usr/lib/python3.2/logging/config.py", line 202, in _install_loggers
log.addHandler(handlers[hand])
KeyError: 'nullHandler'
其他失败的尝试:尝试时没有定义[handler_nullHandler],使用nullHandler或nullHandler作为格式化程序,它总是以相同的方式失败
请注意,如果我禁用RPIO_记录器(通过从[loggers]键部分删除RPIO),那么其余的工作正常
那么,使用nullHandler的正确方法是什么呢?在
处理程序
部分中,您只列出文件处理程序
。因此,当您阅读该配置时,它只使用fileHandler
构建一个handlers
字典。因此,当您尝试使用nullHandler
时,您会得到一个KeyError
,因为它不在字典中
我猜这是一个简单的打字错误,但如果不是,请参见文档:
该文件必须包含名为[Logger]、[Handler]和[formatters]的部分,这些部分通过名称标识文件中定义的每种类型的实体。对于每个这样的实体,都有一个单独的部分来标识该实体是如何配置的
换句话说,仅仅拥有
handler\u nullHandler
部分并不会创建名为nullHandler
的处理程序;在handlers
部分中使用keys=…,nullHandler,
可以做到这一点。在出现类似错误后,我还必须在处理程序配置和级别中指定args=()
。将null处理程序添加到子记录器如何防止根记录器显示日志消息?
[loggers]
keys=root,RPIO
[handlers]
keys=fileHandler
[formatters]
keys=defaultFormatter
[logger_root]
level=DEBUG
handlers=fileHandler
[logger_RPIO]
level=NOTSET
handlers=nullHandler
qualname=_RPIO.py
propagate=0
[handler_nullHandler]
class=NullHandler
level=DEBUG
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=defaultFormatter
filemode=w
args=('../log/pilberry_core.log',)
[formatter_defaultFormatter]
format=%(asctime)s %(filename)s: %(funcName)s: %(message)s
datefmt=%Y/%m/%d %H:%M:%S