python学习交流公众号 Hello Python上线啦,欢迎关注
一:收集全局异常的意义?
系统总有些错误和异常是意料之外的,需要收集相应信息,并返回错误(避免无响应),这里采用中间件的方式记录所有异常信息,包括请求体等信息。
二:配置
中间件的使用以及logging的配置不再赘述。
直接上代码(记得将LogMiddle添加到settings):这里捕获异常,并返回json格式信息,
class LogMiddle(MiddlewareMixin):
"""
全局错误日志中间件
"""
def process_exception(self, request, exception):
print('发生异常', exception)
logger_error = logging.getLogger('django_ERROR')
request_body = request.body
request_url = request.get_raw_uri()
request_method = request.method
error_msg = '\nRequest Body:{},\nRequest Url:{},\nRequest Method:{},\n{}'.format(request_body, request_url,
request_method,
exception)
logger_error.error(error_msg)
print(error_msg)
return HttpResponse(json.dumps(dict(code=500, data={}, msg="Some thing error")), content_type="application/json")
三:结果
日志记录如下:
2020-09-21 09:08:04,768 G*****\services\pub_middleware\my_middleware.py process-13700 thread-15264 69 [ERROR]:
Request Body:b'{"page_size":10,"page_num":1}',
Request Url:http://****:*****/a*****00650484714,
Request Method:POST,
'NoneType' object is not subscriptable