正确使用nullHandler禁用来自特定包的日志消息

时间:2014-08-10 10:53:19

标签: python logging config-files

我想停止外部模块来填充我的日志文件,就像这个问题一样: Disable logging for a particular package 受答案启发的配置文件如下。我使用python3.2

我的问题是,它不起作用:行' handlers = nullHandler'提出这个:

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'

我发现无法使用此nullHandler。 配置文件是:

[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

其他尝试失败:尝试没有定义[handler_nullHandler],使用nullHandler或NullHandler作为格式化程序,它总是以相同的方式失败。

请注意,如果我禁用RPIO_logger(通过从[loggers]键部分删除RPIO),那么其余的工作正常。

那么,使用nullHandler的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

handlers部分,您只列出fileHandler。因此,当您在该配置中读取时,它会构建仅handlers的{​​{1}}字典。因此,当您尝试使用fileHandler时,会得到nullHandler,因为它不在字典中。

我猜这是一个简单的拼写错误,但如果没有,请参阅文档中的Configuration file format

  

该文件必须包含名为[loggers],[handlers]和[formatters]的部分,这些部分按名称标识文件中定义的每种类型的实体。对于每个这样的实体,都有一个单独的部分,用于标识该实体的配置方式。

换句话说,只有KeyError部分不会创建名为handler_nullHandler的处理程序;在nullHandler部分中keys=…,nullHandler,…执行此操作。