requestRecord.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2021/9/22 17:08
  4. @Auth : Locky
  5. @File :requestRecord.py
  6. @IDE :PyCharm
  7. """
  8. import json
  9. import logging
  10. import time
  11. from django.utils.deprecation import MiddlewareMixin
  12. from Model.models import RequestRecordModel
  13. class RequestRecordMiddleware(MiddlewareMixin):
  14. @staticmethod
  15. def process_request(request):
  16. request.start_time = time.time()
  17. @staticmethod
  18. def process_response(request, response):
  19. try:
  20. execute_time = time.time() - request.start_time
  21. method = request.method
  22. url = request.path
  23. if url != '/cloudstorage/getsignsts':
  24. # 获取请求参数并转为字符串
  25. if method == 'GET':
  26. parameter = json.dumps(request.GET.dict())
  27. elif method == 'POST':
  28. parameter = json.dumps(request.POST.dict())
  29. else:
  30. parameter = ''
  31. content = eval(str(response.content, 'utf-8')) # bytes 转为 dict
  32. # 记录响应码不为0的接口日志
  33. if ('result_code' in content and content['result_code'] != 0) or \
  34. ('code' in content and content['code'] != 0):
  35. logger = logging.getLogger('error_code')
  36. logger.info('请求接口:{}, 请求方式:{}, 请求参数:{}, 响应数据:{}, 状态码:{}'.
  37. format(url, method, parameter, content, response.status_code))
  38. else:
  39. # Log responses with result_code or code equal to 0 to a different file 'error_code_0.log'
  40. logger = logging.getLogger('success_code')
  41. logger.info('请求接口:{}, 请求方式:{}, 请求参数:{}, 响应数据:{}, 状态码:{}'.
  42. format(url, method, parameter, content, response.status_code))
  43. if response.status_code == 500: # 处理没有捕获异常的情况
  44. request_record_data = {
  45. 'method': method,
  46. 'url': url,
  47. 'parameter': parameter,
  48. 'execute_time': execute_time,
  49. 'status_code': 500,
  50. 'reason_phrase': response.reason_phrase,
  51. }
  52. RequestRecordModel.objects.create(**request_record_data)
  53. elif response.content: # 处理捕获异常的情况
  54. error_flag = False
  55. reason_phrase = ''
  56. if 'result_code' in content and (content['result_code'] == 500 or content['result_code'] == 474):
  57. reason_phrase = content['result']
  58. error_flag = True
  59. elif 'code' in content and content['code'] == 500: # ResponseObject.returntype == 'pc'
  60. reason_phrase = content['data']
  61. error_flag = True
  62. if error_flag:
  63. request_record_data = {
  64. 'method': method,
  65. 'url': url,
  66. 'parameter': parameter,
  67. 'execute_time': execute_time,
  68. 'status_code': 500,
  69. 'reason_phrase': reason_phrase,
  70. }
  71. RequestRecordModel.objects.create(**request_record_data)
  72. finally:
  73. return response