Python中的SMTPHandler';s日志模块一次发送一封电子邮件。我怎样才能阻止这一切?
我正在尝试使用Python的Python中的SMTPHandler';s日志模块一次发送一封电子邮件。我怎样才能阻止这一切?,python,logging,Python,Logging,我正在尝试使用Python的日志记录模块发送包含日志的电子邮件。我遇到的问题是,每次我写日志条目时,都会发送一封电子邮件。如何在脚本结束时将日志消息排队并发送一封电子邮件 我感觉它是通过emit()方法完成的,但我不知道如何使用它 import logging, logging.handlers log = logging.getLogger("mylogger") log.setLevel(logging.DEBUG) h2 = logging.handlers.SMTPHandler(mai
日志记录
模块发送包含日志的电子邮件。我遇到的问题是,每次我写日志条目时,都会发送一封电子邮件。如何在脚本结束时将日志消息排队并发送一封电子邮件
我感觉它是通过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. :-(")
只需将SMTPHandler子类化,以生成所需的行为。 例如,您可以覆盖emit方法,以便在每三条记录的消息上发送一封邮件
注意:根据您选择的实现,如果您只记录一次或两次,则不会发送任何邮件。也许延迟发送可能是解决方案:在发送邮件之前请稍等片刻。如果一秒钟后没有收到其他行,则发送它,否则将该行添加到要发送的消息中,然后再等待一秒钟。。。等等(延迟发送必须在单独的线程中完成(考虑使用)看看我为一个类似的问题给出了什么。要使用的示例处理程序是;您可以根据自己的要求对其进行调整。@VinaySajip-您对使用smtplib模块发送电子邮件有何想法?@algotr8der-您可以从示例处理程序中看到它实际上使用了
smtplib
来发送电子邮件。