Django 未处理异常
现在它是在DEBUG = True模式下运行。有时候,当遇到错误时,它会显示一个错误信息和详细的追踪信息,但有时候它只会显示以下几行:
Unhandled Exception
An unhandled exception was thrown by the application.
我必须切换到开发服务器才能看到详细的信息。
我该怎么做才能在遇到错误时总是显示追踪信息呢?
4 个回答
4
你在用Apache吗?
我只是好奇,你想查看错误追踪信息的是生产环境还是开发环境?
在Apache和mod_python下运行的用户,应该确保在Apache的配置文件中把PythonDebug设置为关闭;这样可以确保在Django加载之前发生的任何错误不会被公开显示。
我猜你想把PythonDebug设置为开启,这个设置只推荐在开发环境中使用。
10
只需要连接到 got_request_exception 这个信号,然后记录下异常信息:
from django.core.signals import got_request_exception
import logging
def log(*args, **kwargs):
logging.exception('error')
got_request_exception.connect(log)
这样就会记录下完整的错误追踪信息。在开发服务器上,它会在控制台显示出来。
6
也许你可以用这个小代码片段,它会把错误记录到Apache的日志里:
utils.py
:
def log_traceback(exception, args):
import sys, traceback, logging
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
logging.debug(exception)
logging.debug(args)
for tb in traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback):
logging.debug(tb)
site_logging.py
:
import logging
import sys
logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stderr)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
把它放到你的 settings.py
文件里:
import site_logging
然后在你的代码中使用:
from where.is.your.utils import log_traceback
try:
`do something`
except Exception, args:
log_traceback(Exception, args)