Правильное использование nullHandler для отключения регистрации сообщений из определенного пакета

Я хочу, чтобы внешний модуль заполнил мой файл журнала, как в этом вопросе: Отключите запись в журнал для определенного пакета. Файл конфигурации, вдохновленный ответом, приведен ниже. Я использую 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 (удалив RPIO из разделов ключей [loggers]), то все остальное будет работать нормально.

Итак, как правильно использовать nullHandler?

1 ответ

Решение

В вашем handlers раздел, вы только список fileHandler, Итак, когда вы читаете в этом конфиге, он создает handlers словарь только fileHandler, Итак, когда вы пытаетесь использовать nullHandler, вы получите KeyErrorпотому что его нет в словаре.

Я предполагаю, что это была простая опечатка, но если нет, см. Формат файла конфигурации в документации:

Файл должен содержать разделы, называемые [loggers], [handlers] и [formatters], которые по имени идентифицируют сущности каждого типа, которые определены в файле. Для каждого такого объекта есть отдельный раздел, который определяет, как этот объект настроен.

Другими словами, просто имея handler_nullHandler раздел не создает обработчик с именем nullHandler; имеющий keys=…,nullHandler,… в handlers раздел делает это.

Другие вопросы по тегам