我跑 Django 1.0 和我靠近部署我的应用程序。因此,我将改变调试设置错误的。

这样说,我仍然喜欢到包括堆栈跟踪我500.html 页面的错误时有发生。通过这样做,用户可以复制和粘贴的错误和容易地通过电子邮件发送给开发商。

任何思考如何最好地处理这个问题?

有帮助吗?

解决方案

自动记录你的500多,这种方式:

  • 你知道他们什么时候会发生。
  • 你不需要依靠用户发送你栈跟踪.

乔尔建议甚至迄今为止为将自动创造票在你的错误跟踪器的时候你的应用程序的经验失败的。就个人而言,我创建一个(私人)RSS与栈跟踪,网址,等等。那个开发商可以订阅。

表示堆的痕迹到你的用户,另一方面可能的泄漏信息的恶意用户可以用来攻击你的网站。过于详细的错误消息的一个经典的垫脚石SQL注射攻击。

编辑 (加代码样捕捉回溯):

你可以得到的异常的信息sys.exc_info的呼吁。在格式化的回溯显示来自回溯模块:

import traceback
import sys

try:
    raise Exception("Message")
except:
    type, value, tb = sys.exc_info()
    print >> sys.stderr,  type.__name__, ":", value
    print >> sys.stderr, '\n'.join(traceback.format_tb(tb))

打印:

Exception : Message
  File "exception.py", line 5, in <module>
    raise Exception("Message")

其他提示

正如@zacherates所说,你真的不想向你的用户显示堆栈跟踪。解决此问题的最简单方法是Django默认情况下,如果你自己和你的开发人员在ADMINS设置中列出了电子邮件地址;每当DEBUG = False出现500错误时,它会向该列表中的每个人发送一封电子邮件,其中包含完整的堆栈跟踪(以及更多)。

如果我们想在你的模板(500.html)上显示生成的异常,那么我们可以编写你自己的500视图,抓住异常并将其传递给你的500模板。

步骤:

#在views.py中:

import sys,traceback

def custom_500(request):
    t = loader.get_template('500.html')

    print sys.exc_info()
    type, value, tb = sys.exc_info()
    return HttpResponseServerError(t.render(Context({
        'exception_value': value,
        'value':type,
        'tb':traceback.format_exception(type, value, tb)
    },RequestContext(request))))

#在Main urls.py中:

from django.conf.urls.defaults import *
handler500 = 'project.web.services.views.custom_500'

#在模板(500.html)中:

{{ exception_value }}{{value}}{{tb}}

更多关于它: https://docs.djangoproject.com/en/dev/topics/http/views/#the-500-server-error-view

您可以在自定义异常处理程序中调用 sys.exc_info()。但我不建议这样做。 Django可以向您发送例外电子邮件。

我知道这是一个老问题,但是这些天我会建议使用的服务,例如 哨兵 捕获你的错误。

在Django、步骤来设置这是非常简单。从 文档:

  • 安装使用乌鸦 pip install raven
  • 添加 'raven.contrib.django.raven_compat' 你的 settings.INSTALLED_APPS.
  • 添加 RAVEN_CONFIG = {"dsn": YOUR_SENTRY_DSN} 你的设置。

然后,在你的500页(定义 handler500),通过 request.sentry.id 该模板和用户可以参考的具体错误,没有任何你的内部被暴露出来。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top