在使用manage.py runserver时,将堆栈跟踪打印到stdout以解决Django中的错误

Bia*_*cki 17 python django

我做了一些搜索,但我想知道是否有人有一个日志配置的片段,以便让Django在请求期间遇到错误时将堆栈跟踪输出到stdout(所以我可以在终端窗口中看到它).这是专门用于本地开发/调试的,主要用于我执行AJAX发布请求时,我必须查看Firebug中的HTML以确定错误发生在哪一行.

Mik*_*lan 29

另一种方法是使用LOGGING.具体来说,./manage.py runserver通过将以下内容添加到settings.py文件中,您可以在运行时获得堆栈跟踪:

LOGGING = {
    'version': 1,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.request': {
            'handlers':['console'],
            'propagate': True,
            'level':'DEBUG',
        }
    },
}
Run Code Online (Sandbox Code Playgroud)

此语法来自Django文档配置日志记录,可以进一步修改以增加或减少控制台日志记录的数量.

此外,当ERROR消息和4XX响应被引发为WARNING消息时,将引发5XX响应.

需要注意的是这个问题的答案-有2013重复这里.

  • 在我看来,这应该是首选的方法.您可以更好地控制要使用的记录器,要记录的内容等. (4认同)

Dan*_*een 21

您可以创建一个中间件来执行此操作.这是我用于项目的修改后的片段:

class ExceptionLoggingMiddleware(object):
    def process_exception(self, request, exception):
        import traceback
        print traceback.format_exc()
Run Code Online (Sandbox Code Playgroud)

将此处理程序放在Django设置的中间件部分中.


Ili*_*ski 16

奇怪的是没人提到这个DEBUG_PROPAGATE_EXCEPTIONS设置.它不是用于生产,而是在测试/调试环境中非常容易使用.只需添加到settings.py:

DEBUG_PROPAGATE_EXCEPTIONS = True
Run Code Online (Sandbox Code Playgroud)

  • 确实这似乎是最合适的答案:) (2认同)