【问题标题】:send email only for log level python仅为日志级别 python 发送电子邮件
【发布时间】:2019-06-20 10:12:52
【问题描述】:

问了几个类似的问题,但我找不到专门解决这种情况的问题。

在 python 中,我有一个类使用一个库,当出现错误或无法处理的数据时会抛出异常。

我的类包装了库,捕获异常并使用记录器记录它们。

我想通过电子邮件向我自己提出任何异常,但我不想为每个日志条目都收到一封电子邮件。也就是说,我只想在使用 logger.exception("The Exception") 记录某些内容时收到电子邮件,而不是在使用 logger.info("Great things are getting") 记录时收到电子邮件

据我了解,SMTP 处理程序会将所有日志条目通过电子邮件发送给我。

【问题讨论】:

  • 使用不同的处理程序? Multiple handlers and formatters
  • 您还想记录其他级别吗?还是只关心异常?
  • @wwii 我想记录一切,但只为例外情况发送电子邮件。
  • Handlers。另请参阅其他评论中的食谱链接。在处理具有适当级别的异常日志时,创建一个处理程序并将其设置为 CRITICAL 或 ERROR。

标签: python python-3.x exception logging exception-handling


【解决方案1】:

您可以创建自己的日志过滤器,如下所示:

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。

【讨论】:

  • 太棒了。有没有简单的方法可以检查“记录”是否异常?
  • LogRecord attributes中所述,如果日志记录捕获到异常,则可能有exc_info字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2016-02-23
相关资源
最近更新 更多