我已经为新的python脚本设置了日志记录模块。我有两个处理程序,一个将内容发送到文件,另一个用于电子邮件警报。 SMTPHandler设置为以ERROR或更高级别发送任何邮件。

除非SMTP连接失败,否则一切正常。如果SMTP服务器不响应或身份验证失败(需要SMTP身份验证),则整个脚本将消失。

我是python的新手,所以我试图找出如何捕获SMTPHandler引发的异常,以便通过电子邮件发送日志消息的任何问题都不会破坏我的整个脚本。由于我还将错误写入日志文件,因此如果SMTP警报失败,我只想继续前进,而不要停止任何操作。

如果我需要一个“ try:”语句,它将遍历logging.handlers.SMTPHandler设置,还是围绕my_logger.error()的各个调用?

最佳答案

在日志记录期间发生的异常不应停止您的脚本,尽管它们可能导致回溯打印到sys.stderr。为了防止此打印输出,请执行以下操作:

logging.raiseExceptions = 0


这不是默认值(因为在开发中通常要了解故障),但在生产中不应设置raiseExceptions

您应该发现SMTPHandler在下次记录错误(或更高级别)时将尝试重新连接。

logging确实会通过SystemExitKeyboardInterrupt异常,但是应处理所有其他异常,以免它们导致使用日志记录的应用程序终止。如果发现不是这种情况,请发布正在发生的异常并导致脚本终止的特定详细信息,以及有关您的Python /操作系统的版本。请记住,如果存在导致处理程序阻塞的网络超时(例如,DNS查找需要很长时间,或者SMTP连接需要很长时间),则脚本可能似乎挂起。

07-24 13:18