我正在尝试使用Python的logging
模块发送包含日志的电子邮件。我遇到的问题是,每次写日志条目时,都会发送一封电子邮件。如何在脚本结束时对日志消息进行排队并发送一封电子邮件?
我觉得这是用emit()
方法完成的,但我无法弄清楚如何使用它。
import logging, logging.handlers
log = logging.getLogger("mylogger")
log.setLevel(logging.DEBUG)
h2 = logging.handlers.SMTPHandler(mailhost='mailserver',
fromaddr='noreply@example.com',
toaddrs=['me@example.com'],
subject='The log',
credentials=('user','pwd'),
secure=None)
h2.setLevel(logging.INFO)
h2.setFormatter(f)
log.addHandler(h2)
log.info("Did something")
log.info("Did something else")
log.info("This would send a third email. :-(")
答案 0 :(得分:8)
请参阅this answer我提供的类似问题。要使用的示例处理程序是here;你可以根据自己的要求进行调整。
答案 1 :(得分:2)
简单地将SMTPHandler子类化以产生想要的行为。 例如,您可以覆盖emit方法,以便在每个第三条记录的消息上发送邮件
警告:根据您选择的实施方式,如果您只记录一次或两次,则根本不会发送任何邮件。也许延迟发送可能是解决方案:在发送邮件之前等一下。如果在一秒之后没有接收到其他行,则发送它否则将该行添加到要发送的消息中并等待另一秒......依此类推......(延迟发送必须在单独的线程中完成(考虑使用{ {3}})