我已经设置为我的新Python脚本日志模块。我有两个处理器,一个送东西到一个文件,一个用于电子邮件警报。所述SMTPHandler是设置于在ERROR级别邮寄任何或以上。

一切都很正常,除非SMTP连接失败。如果SMTP服务器没有响应或认证失败(它需要SMTP认证),则整个脚本死亡。

我是相当新的蟒蛇,所以我试图找出如何捕捉异常的SMTPHandler正在提高,使得通过电子邮件发送日志消息的任何问题,不会使我整个脚本。因为我也写错误日志文件,如果SMTP警报失败,我只是想继续下去,不会停止任何东西。

如果我需要一个“尝试:”语句,将它绕过logging.handlers.SMTPHandler设置,或者围绕单个调用my_logger.error()

有帮助吗?

解决方案

记录过程中发生的不应该停止脚本,尽管它们可能会导致回溯例外要打印到sys.stderr。为了防止这种情况的打印输出,执行下列操作:

logging.raiseExceptions = 0

这是不是默认的(因为在发展,你通常想知道关于失败的),但在生产,raiseExceptions不应设置。

您应该发现SMTPHandler将在下一个时间尝试重新连接的错误(或更高)被记录。

logging的通过SystemExitKeyboardInterrupt异常,但所有其他的处理方式,使它们不会导致它使用记录应用程序的终止。如果你觉得这是不是这种情况,请发表这是通过获取和使你的脚本来终止例外的具体细节,以及您的Python /操作系统的版本。请记住,该脚本可能似乎挂起是否存在,这是造成该处理程序以阻止网络超时(例如,如果DNS查找需要很长的时间,或者如果SMTP连接需要很长的时间)。

其他提示

您可能需要做两件事。为了弄清楚这一点,我建议安装一个本地邮件服务器并使用它。通过这种方式,可以在你的脚本运行将其关闭,并记下错误消息。

要保持代码的可维护性,你应该在你可以处理在一个地方例外(而不是每个包裹通话记录器使用try-除外),这样的方式延伸SMTPHandler。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top