我已将日志记录模块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吗?
error_mail_handler
memory_handler
很乐意从解决此问题的任何人那里看到一些有效的代码。
您可能需要使用或调整BufferingSMTPHandler其在该测试脚本。
BufferingSMTPHandler
通常,如果它是已添加到记录器的MemoryHandler处理程序的目标,则无需向记录器添加处理程序。如果设置了处理程序的级别,则将影响处理程序的实际处理方式- 它不会处理比其级别设置更严格的任何操作。