Django调试

django默认情况会将所有的错误信息以HTML形式返回给前端,这样导致在运行nose的单元测试用例出现错误时,无法看到详细的错误栈帧信息,给程序的debug带来一定的困扰。

如何debug django异常栈帧?

方法一:

配置settings.py,将django的所有的debug信息,错误栈帧信息输出到终端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}

连接信号got_request_exception

1
2
3
4
5
6
7
from django.core.signals import got_request_exception

def exc_cb(sender, **kwargs):
import traceback
traceback.print_exc()

got_request_exception.connect(exc_cb)

方法二: 通过middleware,在process_exception中增加exception的调试信息,并将此middleware增加到settings.pyMIDDLEWARE_CLASSES中。

1
2
3
4
5
import traceback

class LogMiddleware(object):
def process_exception(self, request, exception):
traceback.print_exc()

注: 在中间件process_exception方法中打印异常栈帧,只能debug view函数的异常。 如果异常发生在中间件中,无法打印异常信息。

参考