Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的SMTPHandler';s日志模块一次发送一封电子邮件。我怎样才能阻止这一切?_Python_Logging - Fatal编程技术网

Python中的SMTPHandler';s日志模块一次发送一封电子邮件。我怎样才能阻止这一切?

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

我正在尝试使用Python的
日志记录
模块发送包含日志的电子邮件。我遇到的问题是,每次我写日志条目时,都会发送一封电子邮件。如何在脚本结束时将日志消息排队并发送一封电子邮件

我感觉它是通过
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
来发送电子邮件。