Django 日志间件
想在请求的开始打印每个请求的请求方式,地址,ip,登录用户名。在响应后打印响应码,响应结果,响应时间,并自动换行。
-
#!/usr/bin/env python3
-
# -*- coding:utf-8 -*-
-
-
import logging
-
import time
-
-
from django.utils.deprecation import MiddlewareMixin
-
-
logger = logging.getLogger(__name__)
-
-
"""日志中间件"""
-
-
-
class OpLogs(MiddlewareMixin):
-
__exclude_urls = ['index/'] # 定义不需要记录日志的url名单
-
-
def __init__(self, *args):
-
super().__init__(*args)
-
self.start_time = None # 开始时间
-
self.end_time = None # 响应时间
-
self.data = {} # dict数据
-
-
def process_request(self, request):
-
"""
-
绑定request
-
"""
-
-
self.start_time = time.time() # 开始时间
-
-
# 请求IP
-
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
-
if x_forwarded_for:
-
# 如果有代理,获取真实IP
-
re_ip = x_forwarded_for.split(",")[0]
-
else:
-
re_ip = request.META.get('REMOTE_ADDR')
-
-
# 请求方法
-
re_method = request.method
-
-
path = request.path
-
try:
-
name = request.user.name
-
except AttributeError:
-
name = None
-
-
self.data.update(
-
{'method': re_method, # 请求方法
-
'path': path, # 请求url
-
'ip': re_ip, # 请求IP
-
're_user': name # 操作人(需修改),网站登录用户
-
}
-
)
-
logger.info(self.data)
-
-
def process_response(self, request, response):
-
"""
-
绑定response
-
"""
-
# 请求url在 exclude_urls中,直接return,不打印日志
-
for url in self.__exclude_urls:
-
if url in self.data.get('path'):
-
return response
-
-
# 获取响应数据字符串(多用于API, 返回JSON字符串)
-
rp_content = response.content.decode()
-
self.data['rp_content'] = rp_content
-
-
self.data['status_code'] = response.status_code # 响应码
-
-
# 耗时
-
self.end_time = time.time() # 响应时间
-
access_time = self.end_time - self.start_time
-
self.data['access_time'] = round(access_time * 1000) # 耗时毫秒/ms
-
-
logger.info(str(self.data) "]\n")
-
return response
需要继承MiddlewareMixin类 process_request()每个请求的日志,process_response()响应日志
然后注册到中间件
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiaejfh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22