小编典典

在Python中整理输出,使用SMTPHandler记录MemoryHandler

python

我已将日志记录模块MemoryHandler设置为将SMTPHandler目标的调试和错误消息排队。我想要的是当过程错误包含到该点为止的所有调试语句(每行一个)时发送一封电子邮件。我得到的是每条调试消息的单独电子邮件。

这似乎应该是微不足道的,并且是日志记录程序包的一部分,但是我找不到任何有关它的内容,没有示例,在Google上也没有。

log = logging.getLogger()
log.setLevel(logging.DEBUG)
debug_format = logging.Formatter("%(levelname)s at %(asctime)s in %(filename)s (line %(lineno)d):: %(message)s")

# write errors to email
error_mail_subject = "ERROR: Script error in %s on %s" % (sys.argv[0], os.uname()[1])
error_mail_handler = logging.handlers.SMTPHandler(SMTP_HOST, 'errors@'+os.uname()[1], [LOG_EMAIL], error_mail_subject)
error_mail_handler.setLevel(logging.ERROR)
#error_mail_handler.setLevel(logging.DEBUG)
error_mail_handler.setFormatter(debug_format)

# buffer debug messages so they can be sent with error emails
memory_handler = logging.handlers.MemoryHandler(1024*10, logging.ERROR, error_mail_handler)
memory_handler.setLevel(logging.DEBUG)

# attach handlers
log.addHandler(memory_handler)
log.addHandler(error_mail_handler)

与此相关:

无论如何,是否需要将error_mail_handler明确添加到记录器memory_handler?应该error_mail_handler设置为DEBUG还是ERROR目标?从中喂食时它甚至还需要一个目标memory_handler吗?

很乐意从解决此问题的任何人那里看到一些有效的代码。


阅读 164

收藏
2020-12-20

共1个答案

小编典典

您可能需要使用或调整BufferingSMTPHandler其在该测试脚本

通常,如果它是已添加到记录器的MemoryHandler处理程序的目标,则无需向记录器添加处理程序。如果设置了处理程序的级别,则将影响处理程序的实际处理方式-
它不会处理比其级别设置更严格的任何操作。

2020-12-20