Вызов функции при создании записи python в логгере - PullRequest
0 голосов
/ 21 января 2020

У меня есть клиент, который отправляет запросы на остальные API. Клиент уже работает и написан таким образом, что перехватывает все возможные исключения. Я хочу сделать дополнение, чтобы всякий раз, когда регистрировалось сообщение об исключении, вызывалась функция, которая принимает это сообщение об исключении вместе со стековой трассировкой и отправляет его на указанный адрес электронной почты. Моей первой попыткой было запустить регистратор следующим образом:

self.log = logging.getLogger(__name__)
self.log.exception = MagicMock(side_effect=self.log.exception)

и затем проверить, был ли вызван log.exception или нет. Однако этот подход не дает мне доступа ни к сообщению журнала, ни к трассировке стека. Есть ли более простой способ выполнить sh, чем расширить весь модуль регистрации?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Если MagicMock является объектом регистрации и реализует все необходимые методы (https://docs.python.org/3/library/logging.html), вы можете добавить следующее:

fh = MagicMock()
fh.setLevel(logging.ERROR)
logger.addHandler(fh)
0 голосов
/ 21 января 2020

Добавьте SMTPHandler к регистратору.

from logging.handlers import SMTPHandler


self.log = logging.getLogger(__name__)
send_email = SMTPHandler(...)
self.log.addHandler(send_email)

Подробную информацию о настройке обработчика см. В документации. Чтобы настроить электронную почту, создайте подкласс SMTPHandler и переопределите метод emit.

...