отправлять электронную почту только для журнала уровня Python - PullRequest
0 голосов
/ 27 января 2019

Задано несколько похожих вопросов, но я не смог найти ни одного, который бы конкретно касался этого сценария.

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

Мой класс оборачивает библиотеку, ловит исключения и регистрирует их с помощью регистратора.

Я хочу отправить по электронной почте любое исключение, которое возникает у меня, но я не хочу получать электронную почту для каждой записи в журнале. То есть я хочу получать электронную почту только тогда, когда что-то зарегистрировано с помощью logger.exception («Исключение»), но не если оно зарегистрировано с помощью logger.info («Великие вещи происходят»)

Насколько я понимаю, обработчик SMTP отправляет мне все записи журнала по электронной почте.

1 Ответ

0 голосов
/ 27 января 2019

Вы можете создать свой собственный фильтр регистрации, например:

import logging


class MessageFilter(logging.Filter):
    def filter(self, record):
        return 'goodbye' in record.msg


logger = logging.getLogger(__name__)


handler = logging.StreamHandler()
handler.addFilter(MessageFilter())
logger.addHandler(handler)


logger.error('hello world')
logger.error('goodbye moon')

, что приводит к

goodbye moon

Просто замените сообщение в filter на то, которое вы хотите сопоставитьи прикрепите его к вашему SMTPHandler.

...