Django - 在 try-except 代码中发送错误报告电子邮件



是否可以连接到 Django 的内置错误报告来自try - except代码块的电子邮件?换句话说,通过电子邮件将默认错误报告和堆栈跟踪发送到ADMINS/MANAGERS,同时仍然具有特定于情况的错误处理。

具体示例:

在执行复杂计算和生成

大型报告的项目中,显示报告页面的视图会执行所有计算,并生成一个包含大量漂亮表格和图形的长 html 页面,还可以从同一 HTML 的各个部分生成可下载的 PDF。

最近,由于 S3 上的存储问题,我们在 PDF 生成中遇到了错误。现在这显然是我们需要跟踪和参与的错误,但如果大多数用户可以在屏幕上看到报告,他们会很高兴。如果 PDF 下载链接没有显示,问题可能会在数小时甚至数天内完全不被注意到 - 但应该通知开发团队。


理想情况下,但不一定,我想要一个与记录器无关的解决方案,它将使用使用的任何错误记录器并触发默认的 500 错误处理程序,并返回到finally块或except块之后。

您需要做的就是使用 Python 的日志记录框架在适当的级别发出适当的消息。 在您的settings.py中,有一个LOGGING变量用于定义如何记录事物。 默认情况下,我相信 Django 有任何ERROR django.request将由 mail_admins 处理。

所以在你的代码中,你需要做的就是

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_admins.

最后,我建议研究哨兵,因为它是一个非常出色的错误记录工具。

最新更新