Django全局异常捕获中间件

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值