在使用manage.py runserver时,Django错误时打印堆栈追踪到stdout
我查了一些资料,但我想知道有没有人能分享一段配置代码,让Django在遇到请求错误时,把错误的详细信息直接输出到终端窗口(也就是控制台)。这样我在本地开发和调试的时候,特别是处理AJAX的POST请求时,就可以方便地看到错误发生在哪一行,而不需要去Firebug里查看HTML。
6 个回答
28
奇怪的是,没人提到 DEBUG_PROPAGATE_EXCEPTIONS
这个设置。这个设置不适合用在生产环境,但在测试或调试环境中使用起来非常简单。只需要在 settings.py
文件中添加以下内容:
DEBUG_PROPAGATE_EXCEPTIONS = True
38
另一种方法是使用 日志记录。具体来说,当你运行 ./manage.py runserver
时,可以通过在 settings.py 文件中添加以下内容来获取堆栈跟踪信息:
LOGGING = {
'version': 1,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.request': {
'handlers':['console'],
'propagate': True,
'level':'DEBUG',
}
},
}
这个语法来自Django的文档,详细内容可以查看 配置日志记录,你还可以进一步修改它,以增加或减少控制台输出的日志量。
另外,5XX 的响应会被当作错误信息处理,而 4XX 的响应则会被当作警告信息处理。
请注意,这个问题和答案在2013年有一个重复的内容,可以在 这里 找到。
25
你可以创建一个中间件来实现这个功能。下面是我在一个项目中使用的一个修改过的代码片段:
class ExceptionLoggingMiddleware(object):
def process_exception(self, request, exception):
import traceback
print traceback.format_exc()
把这个处理程序放在你Django设置中的中间件部分。