我已经在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块,我如何使用正则表达式找到我要寻找的关键字,然后调用我创建的日志以通过电子邮件将错误发送给我?
答案 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()
并不是严格需要的,但是可以使代码更加明确。