[Python] 自定义中间件记录所有请求和响应信息到日志

在不使用Django自带的日志模块,我想把请求和响应信息使用自定义的日志模块记录下来,比如记录请求的请求地址、请求方法、请求路径、请求信息,返回状态码、返回内容长度,要如何做呢?

前面我写了一个日志装饰器,但是只能记录到我写入了视图的request,而无法记录接收到的所有request,于是我想到了用中间件,而Django自定义中间件也很简单。那么我们开始吧,自定义Django中间件记录请求和响应信息到日志中。

假设项目结构如下:

- Myproject
	- Myproject
    	- __init__.py
    	- settings.py
        - urls.py
        - wsgi.py
	- ...
	- ...
    request_middleware.py	# 添加一个request_middleware.py

编辑自定义的中间件

为了能够同时记录请求信息和响应信息,我们在process_response中将请求和响应信息都记录到日志中去:

from django.utils.deprecation import MiddlewareMixin
from Log.logging import Logger	# 导入你自己的日志模块
logger = Logger()


class RequestMiddleware(MiddlewareMixin):
    """ 日志记录请求 """
    def process_response(self, request, response):
        logger.info(f'Received Request: {request.META["REMOTE_ADDR"]}  {request.method} "{request.META["PATH_INFO"]}'
                    f' {request.META["QUERY_STRING"]} {request.META["SERVER_PROTOCOL"]}" {response.status_code} {len(response.content)}')
        return response		# 一定要返回reponse

将中间件加入配置

编辑Myproject/setttings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    ...
    'request_middleware.RequestMiddleware'	# 添加自定义的中间件
]

运行代码,就可以看到日志信息已经输出了:

2020-12-07 19:10:37,116  [request_middleware.py 9] : Received Request: 127.0.0.1  GET "/  HTTP/1.1" 200 858
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值