• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Django 日志间件

武飞扬头像
梦忆安凉
帮助2

 想在请求的开始打印每个请求的请求方式,地址,ip,登录用户名。在响应后打印响应码,响应结果,响应时间,并自动换行

  1.  
    #!/usr/bin/env python3
  2.  
    # -*- coding:utf-8 -*-
  3.  
     
  4.  
    import logging
  5.  
    import time
  6.  
     
  7.  
    from django.utils.deprecation import MiddlewareMixin
  8.  
     
  9.  
    logger = logging.getLogger(__name__)
  10.  
     
  11.  
    """日志中间件"""
  12.  
     
  13.  
     
  14.  
    class OpLogs(MiddlewareMixin):
  15.  
    __exclude_urls = ['index/'] # 定义不需要记录日志的url名单
  16.  
     
  17.  
    def __init__(self, *args):
  18.  
    super().__init__(*args)
  19.  
    self.start_time = None # 开始时间
  20.  
    self.end_time = None # 响应时间
  21.  
    self.data = {} # dict数据
  22.  
     
  23.  
    def process_request(self, request):
  24.  
    """
  25.  
    绑定request
  26.  
    """
  27.  
     
  28.  
    self.start_time = time.time() # 开始时间
  29.  
     
  30.  
    # 请求IP
  31.  
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
  32.  
    if x_forwarded_for:
  33.  
    # 如果有代理,获取真实IP
  34.  
    re_ip = x_forwarded_for.split(",")[0]
  35.  
    else:
  36.  
    re_ip = request.META.get('REMOTE_ADDR')
  37.  
     
  38.  
    # 请求方法
  39.  
    re_method = request.method
  40.  
     
  41.  
    path = request.path
  42.  
    try:
  43.  
    name = request.user.name
  44.  
    except AttributeError:
  45.  
    name = None
  46.  
     
  47.  
    self.data.update(
  48.  
    {'method': re_method, # 请求方法
  49.  
    'path': path, # 请求url
  50.  
    'ip': re_ip, # 请求IP
  51.  
    're_user': name # 操作人(需修改),网站登录用户
  52.  
    }
  53.  
    )
  54.  
    logger.info(self.data)
  55.  
     
  56.  
    def process_response(self, request, response):
  57.  
    """
  58.  
    绑定response
  59.  
    """
  60.  
    # 请求url在 exclude_urls中,直接return,不打印日志
  61.  
    for url in self.__exclude_urls:
  62.  
    if url in self.data.get('path'):
  63.  
    return response
  64.  
     
  65.  
    # 获取响应数据字符串(多用于API, 返回JSON字符串)
  66.  
    rp_content = response.content.decode()
  67.  
    self.data['rp_content'] = rp_content
  68.  
     
  69.  
    self.data['status_code'] = response.status_code # 响应码
  70.  
     
  71.  
    # 耗时
  72.  
    self.end_time = time.time() # 响应时间
  73.  
    access_time = self.end_time - self.start_time
  74.  
    self.data['access_time'] = round(access_time * 1000) # 耗时毫秒/ms
  75.  
     
  76.  
    logger.info(str(self.data) "]\n")
  77.  
    return response
学新通

需要继承MiddlewareMixin类 process_request()每个请求的日志,process_response()响应日志

学新通

 然后注册到中间件

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiaejfh
系列文章
更多 icon
同类精品
更多 icon
继续加载