场景:我不想将SSH连接到一个框中来检索堆栈跟踪,而是希望非技术人员向我发送电子邮件错误!
Django有办法或钩子做这样的事吗? e.g。
def 500_error_happened(request): # psuedocode >__<
if request.user.is_staff:
show_the_debug_stack_trace_page()
else:
show_user_friendly_500_html_page()
答案 0 :(得分:2)
你可能想看看Sentry:
https://github.com/getsentry/sentry
通过这种方式,您可以记录DEBUG = True时通常会看到的错误和堆栈跟踪,聚合它们并深入研究它们。 Sentry可以配置为向您发送电子邮件,以便您立即收到通知。
另一个不需要新依赖项的选项是使用AdminEmailHandler
:
https://docs.djangoproject.com/en/dev/topics/logging/#django.utils.log.AdminEmailHandler
但是,您可能需要调试的一些信息可能很敏感,不应通过电子邮件发送。这就是为什么即使上面提到的Django文档也建议使用像Sentry这样的东西。
答案 1 :(得分:0)
technical_500_response
的中间件:
from django.views.debug import technical_500_response
import sys
class UserBasedExceptionMiddleware(object):
def process_exception(self, request, exception):
if request.user.is_superuser:
return technical_500_response(request, *sys.exc_info())