如何在我的Django 500.html页面中包含堆栈跟踪?

Huu*_*uze 23 python django templates stack-trace

我正在运行Django 1.0,我即将部署我的应用程序.因此,我将把DEBUG设置更改为False.

话虽如此,我仍然希望在发生错误时将堆栈跟踪包含在我的500.html页面上.通过这样做,用户可以复制并粘贴错误,并轻松地通过电子邮件将其发送给开发人员.

有关如何最好地解决这个问题的任何想法?

Aar*_*paa 16

以这种方式自动记录您的500s:

  • 你知道它们何时发生.
  • 您不需要依赖发送堆栈跟踪的用户.

Joel建议甚至在应用程序出现故障时自动在错误跟踪器中创建票证.就个人而言,我使用开发人员可以订阅的stacktraces,url等创建(私有)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))
Run Code Online (Sandbox Code Playgroud)

打印:

Exception : Message
  File "exception.py", line 5, in <module>
    raise Exception("Message")
Run Code Online (Sandbox Code Playgroud)


Car*_*yer 11

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