Правильное использование 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
раздел делает это.