Python Django-在try except代码中发送错误报告电子邮件
除了代码块之外,是否可以从Python Django-在try except代码中发送错误报告电子邮件,python,django,error-handling,Python,Django,Error Handling,除了代码块之外,是否可以从try-链接到Django内置的错误报告电子邮件?换句话说,将默认错误报告和堆栈跟踪通过电子邮件发送到管理员/经理,同时仍进行特定于情况的错误处理 具体示例: 在执行复杂计算并生成大型报告的项目中,显示报告页面的视图执行所有计算,并生成一个包含大量漂亮表格和图形的长html页面,还可以从该html的各个部分生成可下载的PDF 最近,由于S3上的存储问题,我们在生成PDF时出现了错误。现在,这显然是一个错误,我们需要跟踪并参加,但大多数用户都很高兴,如果他们能在屏幕上看到
try
-链接到Django内置的错误报告电子邮件?换句话说,将默认错误报告和堆栈跟踪通过电子邮件发送到管理员
/经理
,同时仍进行特定于情况的错误处理
具体示例:
在执行复杂计算并生成大型报告的项目中,显示报告页面的视图执行所有计算,并生成一个包含大量漂亮表格和图形的长html页面,还可以从该html的各个部分生成可下载的PDF
最近,由于S3上的存储问题,我们在生成PDF时出现了错误。现在,这显然是一个错误,我们需要跟踪并参加,但大多数用户都很高兴,如果他们能在屏幕上看到报告。如果PDF下载链接没有显示出来,这个问题可能会在几个小时甚至几天内完全不被注意到,但是应该通知开发团队
理想情况下,但不一定,我喜欢一个与记录器无关的解决方案,它将使用任何错误记录器,并触发默认的500错误处理程序,然后返回到最后
块或在之后,除了
块。您需要做的就是使用Python的日志框架在适当的级别上发出适当的消息。在settings.py
中,有一个LOGGING
变量,用于定义如何记录事件。默认情况下,我相信Django在Django中有任何错误
。请求
将由邮件管理员处理
所以在你的代码中,你需要做的就是
import logging
logger = logging.getLogger(__name__) # this will create a logger with the module being the logger name
try:
#do stuff you watch to catch
except:
# we're going to catch and just log it
logger.error('Some error title', exc_info=True) # exc_info=True will include the stacktrace
finally:
# what you want to do in your finally block.
注意,这将吞下异常,而不会使其冒泡。您的回复将返回200。如果要冒泡出现异常,只需在except
块中调用raise
。但是,如果您所关心的只是记录错误,但是视图仍然可以正常工作,那么只需记录并接受它
在LOGGING
变量中,可以为不同的记录器名称向记录器添加其他条目。如果要调试某个代码路径,可以使用不同日志状态的应用程序日志,例如INFO
。只要使用模块名创建一个日志记录器,就可以灵活地将日志划分为不同的处理程序,如mail\u管理员。
最后,我建议研究一下,因为这是一个非常好的错误记录工具