使用Regex在例外字符串中查找关键字并根据该电子邮件发送电子邮件

时间:2019-06-11 09:31:16

标签: python logging

我已经在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)')

我的代码有一个tryexcept块,我如何使用正则表达式找到我要寻找的关键字,然后调用我创建的日志以通过电子邮件将错误发​​送给我?

1 个答案:

答案 0 :(得分:0)

这可以通过日志过滤器完成。

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()并不是严格需要的,但是可以使代码更加明确。