我想记录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仅捕获视图中引发的异常。
答案 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