Как перенаправить ведение журнала на последовательный порт с помощью dictconfig в Python - PullRequest
0 голосов
/ 09 апреля 2019

Теперь я могу перенаправить свое сообщение журнала в pyserial с помощью своего пользовательского обработчика журнала, но я не могу установить свой пользовательский обработчик в config config.

Я уже нашел здесь ответ. Они использовали logging.handlers,
, в то время как мой обработчик наследовал от logging.StreamHandler.

Другое дело, что я открываю порт до того, как настрою свой регистратор,
поэтому я также сомневаюсь, что обработчик использует правильный объект так же, как я объявил ранее.

Вот мой обработчик:

class SerialHandler(StreamHandler):
    def __init__(self, port):
        StreamHandler.__init__(self, stream=None)
        self._port = port

    def emit(self, record):
        msg = self.format(record)
        self._port.write(msg)

Вот часть моей конфигурации:

...
'handlers': {
    'serial_handler': {
        'class': communications.my_serial.SerialHandler,
        'level': log_level,
        'formatter': 'standard_formatter',
        'port': serial_port
},
'console_handler': {
        'class': 'logging.StreamHandler',
        'level': log_level,
        'formatter': 'standard_formatter',
        'stream': sys.stdout
},
'file_handler': {
        'class': 'logging.FileHandler',
        'level': log_level,
        'formatter': 'standard_formatter',
        'filename': '{}'.format(log_file_name),
        'mode': 'a',
        'filters': ['RootLoggingFilter']
}
...

Код работает, если я добавлю обработчик вручную, но serial_handler в конфигурации не будет работать, в то время как консоль и файл работали.

Вот код, который я добавляю вручную:

main_logger = logging.getLogger('root.{}'.format('MyTest'))
serial_port = Serial(port, baud)
serial_handler = SerialHandler(serial_port)
serial_handler.setLevel(log_level)
main_logger.addHandler(serial_handler)

Моя цель - установить мой обработчик только внутри config dict,
надеюсь, что кто-то любезно поможет.
Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...