Теперь я могу перенаправить свое сообщение журнала в 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,
надеюсь, что кто-то любезно поможет.
Спасибо всем.