在使用manage.py runserver时,Django错误时打印堆栈追踪到stdout

22 投票
6 回答
30965 浏览
提问于 2025-04-16 16:59

我查了一些资料,但我想知道有没有人能分享一段配置代码,让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设置中的中间件部分。

撰写回答