Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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-处理脱机SMTP服务器_Python_Logging_Handler - Fatal编程技术网

Python日志记录SMTPHandler-处理脱机SMTP服务器

Python日志记录SMTPHandler-处理脱机SMTP服务器,python,logging,handler,Python,Logging,Handler,我已经为我的新python脚本设置了日志模块。我有两个处理程序,一个用于将内容发送到文件,另一个用于电子邮件提醒。SMTPHandler被设置为发送错误级别或更高级别的任何内容 一切正常,除非SMTP连接失败。如果SMTP服务器没有响应或身份验证失败(它需要SMTP身份验证),则整个脚本将终止 我对python相当陌生,因此我正在尝试找出如何捕获SMTPHandler引发的异常,以便通过电子邮件发送日志消息时出现的任何问题都不会影响我的整个脚本。由于我还将错误写入日志文件,因此如果SMTP警报失

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

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

我对python相当陌生,因此我正在尝试找出如何捕获SMTPHandler引发的异常,以便通过电子邮件发送日志消息时出现的任何问题都不会影响我的整个脚本。由于我还将错误写入日志文件,因此如果SMTP警报失败,我只想继续,而不是停止任何操作


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

您可能需要同时执行这两个操作。为了解决这个问题,我建议安装一个本地邮件服务器并使用它。这样,您可以在脚本运行时关闭它,并记录错误消息


为了保持代码的可维护性,您应该以这样一种方式扩展SMTPHandler,即您可以在单个位置处理异常(而不是使用try except包装每个记录器调用)。

您可能需要同时执行这两种操作。为了解决这个问题,我建议安装一个本地邮件服务器并使用它。这样,您可以在脚本运行时关闭它,并记录错误消息


为了保持代码的可维护性,您应该扩展SMTPHandler,以便在单个位置处理异常(而不是使用try except包装每个记录器调用)。

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

logging.raiseExceptions = 0
这不是默认设置(因为在开发中,您通常希望了解故障),但在生产中,不应设置
raiseExceptions

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


日志记录
确实会通过
系统退出
键盘中断
异常,但应处理所有其他异常,以免导致使用日志记录的应用程序终止。如果您发现情况并非如此,请发布正在通过并导致脚本终止的异常的具体细节,以及关于您的Python/操作系统版本的详细信息。请记住,如果存在导致处理程序阻塞的网络超时(例如,如果DNS查找需要很长时间,或者SMTP连接需要很长时间),则脚本可能会挂起。

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

logging.raiseExceptions = 0
这不是默认设置(因为在开发中,您通常希望了解故障),但在生产中,不应设置
raiseExceptions

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


日志记录
确实会通过
系统退出
键盘中断
异常,但应处理所有其他异常,以免导致使用日志记录的应用程序终止。如果您发现情况并非如此,请发布正在通过并导致脚本终止的异常的具体细节,以及关于您的Python/操作系统版本的详细信息。请记住,如果网络超时导致处理程序阻塞(例如,如果DNS查找需要很长时间,或者SMTP连接需要很长时间),则脚本可能会出现挂起状态。

谢谢。我已经添加了raiseExceptions代码。你是对的,它没有终止脚本…重试造成了我认为是的延迟。谢谢。我已经添加了raiseExceptions代码。您是对的,它没有终止脚本…重试造成了我认为是的延迟。我们将使用本地SMTP服务器进行生产。服务器对于开发人员来说是远程的,因此我遇到了错误。我们将使用本地SMTP服务器进行生产。服务器对于dev来说是远程的,因此我遇到了错误。