#python #logging
#python #ведение журнала
Вопрос:
Я использую модуль ведения журнала python. Для настройки я пытаюсь создать конфигурационный файл в формате yaml. Но я получаю ошибку
ValueError: Unable to configure handler 'file_handler': __init__() got an unexpected keyword argument 'propagate'
в то время как я смог его использовать logger.propagate = False
.
Я слежу за python logging yaml config, где они использовали ту же конфигурацию и смогли ее проанализировать.
Вот как выглядит мой yaml
version: 1
formatters:
simple:
format: "%(asctime)s %(funcName)s %(levelname)s %(message)s"
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
file_handler:
class: logging.FileHandler
level: INFO
filename: test_{}.log
formatter: simple
propagate: False
loggers:
dev:
handlers: [console, file_handler]
test:
handlers: [file_handler]
root:
handlers: [file_handler]
Это ошибка, которую я получаю
File "/usr/lib/python3.6/logging/config.py", line 565, in configure
handler = self.configure_handler(handlers[name])
File "/usr/lib/python3.6/logging/config.py", line 738, in configure_handler
result = factory(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'propagate'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "logging_manager.py", line 34, in <module>
LoggingManager()
File "logging_manager.py", line 24, in __init__
logging.config.dictConfig(config)
File "/usr/lib/python3.6/logging/config.py", line 802, in dictConfig
dictConfigClass(config).configure()
File "/usr/lib/python3.6/logging/config.py", line 573, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'file_handler': __init__() got an unexpected keyword argument 'propagate'
чего мне здесь не хватает?
РЕДАКТИРОВАТЬ: я использую среду
Python 3.6.9 (default, Oct 8 2020, 12:12:24)
[GCC 8.4.0] on linux
Комментарии:
1.
Python 3.6.9 (default, Oct 8 2020, 12:12:24) [GCC 8.4.0] on linux
Ответ №1:
Propagate — это свойство регистратора, а не обработчика. Вам нужно удалить его оттуда, где он у вас есть, и поместить его в раздел logger:
loggers:
dev:
handlers: [console, file_handler]
propagate: False <---------------------- HERE for example
test:
handlers: [file_handler]
Комментарии:
1. Спасибо, это сработало для меня, но ссылка, по которой я поделился с python logging yaml config , они делают это в config. Как это работает для них?
2. Вероятно, это не работает для них, и они не проверяли дважды, что код, который они вставляют в свой учебник, совпадает с тем, что у них есть на их компьютере. Распространение на обработчике явно очень неправильно, поскольку обработчики не являются частью иерархии и могут быть присоединены ко многим регистраторам.