有没有办法向管理员用户显示Django调试堆栈跟踪页面,即使设置中的DEBUG = False?

时间:2013-05-17 08:41:11

标签: django

场景:我不想将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()

2 个答案:

答案 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())

(来自https://djangosnippets.org/snippets/935/