используя Regex, чтобы найти ключевое слово в строке исключения и отправить электронную почту на основе этого - PullRequest
0 голосов
/ 11 июня 2019

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

import logging
from logging.handlers import SMTPHandler

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

file_handler = logging.FileHandler('big_errors.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)

print_handler = logging.StreamHandler()
print_handler.setLevel(logging.DEBUG)
print_handler.setFormatter(formatter)

# added email functionality 
email_list = ["Example@gmail.com"]

mail_handler = logging.handlers.SMTPHandler(
    mailhost=('smtpmail1.mail-uk.loc', 25),
    fromaddr="Example@gmail.co.uk",
    toaddrs= email_list,
    subject='ErrorTEST'
)

mail_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(mail_handler)
logger.addHandler(print_handler)

конкретная строка, которую я ищу для захвата,

('08s01' [Database] communication link failure (-4) (SQLFETCH)')

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

1 Ответ

0 голосов
/ 03 июля 2019

Это можно сделать с помощью фильтра журнала.

import re

def regex_filter(record):
    regex_matches_message = bool(re.search(r'your_regex_here', record.getMessage()))
    return regex_matches_message

mail_handler.addFilter(regex_filter)

Требуется Python по крайней мере 3.2, если вы используете более старую версию, вы должны использовать объект Filter вместо функции. bool() не является строго необходимым, но делает код более явным.

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