通过中间件记录500错误回溯

时间:2014-02-25 18:24:57

标签: python django

我想记录500内部服务器错误期间发生的回溯。我已经设置了中间件,我希望这样做:

import traceback
import sys

import logging
logger = logging.getLogger(__name__)

class ProcessExceptionMiddleware(object):
    '''
    Log exceptions and tracebacks any time an exception is encountered
    '''

    def process_response(self, request, response):·
        if response.status_code == 500:
            logger.info('\n'.join(traceback.format_exception(*sys.exc_info())))
        return response

唉,当发生500错误并且触发了这个中间件时,sys.exc_info()返回(None,None,None)。 response本身是一个包含回溯的字符串,但它是一个奇怪的格式化字符串,不易解析。我希望将回溯格式化为一个很好的列表格式,如sys.exc_info()会给我。我怎样才能使这个工作?

请注意,process_exception不可能,因为这是针对不使用Django Views的API,而process_exception仅捕获视图中引发的异常。

2 个答案:

答案 0 :(得分:0)

Django已经知道如何使用完整的回溯来记录未处理的错误。默认配置是通过邮件将报告发送到settings.ADMINS,但您可以重新配置记录器以写入日志文件,syslog,stderr或其他任何内容。完整的文档在这里https://docs.djangoproject.com/en/1.6/topics/logging/

答案 1 :(得分:0)

实现 process_exception 钩子。如果您从 sys.exc_info() 内部调用 process_exception,它将返回异常数据。

https://docs.djangoproject.com/en/3.1/topics/http/middleware/#process-exception