yangtb2024 commited on
Commit
2e4a225
·
1 Parent(s): 04860cd

feat: 格式化记录 JSON POST 请求体

Browse files

- 尝试将 POST 请求体解析为 JSON
- 如果成功,使用缩进格式化后记录
- 如果失败或非 UTF-8,按原格式记录

Files changed (1) hide show
  1. app.py +13 -5
app.py CHANGED
@@ -4,6 +4,7 @@ from fastapi.responses import StreamingResponse
4
  import uvicorn
5
  import os
6
  import logging # 添加 logging 导入
 
7
 
8
  # 配置日志记录
9
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -48,15 +49,22 @@ async def reverse_proxy(request: Request, path: str):
48
 
49
  # 如果是 POST 请求,记录请求体内容
50
  if request.method == "POST":
 
51
  try:
52
- # 尝试解码为 UTF-8 文本进行记录
53
  body_text = body.decode('utf-8')
54
- # 先记录请求信息,然后单独记录请求体,以便正确处理换行
55
- logging.info(f"Received POST request to {path}. Body follows:")
56
- logging.info(body_text) # 直接记录文本,日志系统会处理换行
 
 
 
 
 
 
57
  except UnicodeDecodeError:
58
  # 如果解码失败,记录原始字节信息
59
- logging.info(f"Received POST request to {path}. Body (bytes): {body}")
60
 
61
  try:
62
  # 发送请求到目标服务器,允许重定向,不验证 SSL 证书(在某些情况下可能需要)
 
4
  import uvicorn
5
  import os
6
  import logging # 添加 logging 导入
7
+ import json # 添加 json 导入
8
 
9
  # 配置日志记录
10
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
 
49
 
50
  # 如果是 POST 请求,记录请求体内容
51
  if request.method == "POST":
52
+ logging.info(f"Received POST request to {path}. Body follows:")
53
  try:
54
+ # 尝试解码为 UTF-8 文本
55
  body_text = body.decode('utf-8')
56
+ try:
57
+ # 尝试将文本解析为 JSON
58
+ body_json = json.loads(body_text)
59
+ # 如果成功,格式化 JSON 并记录
60
+ formatted_json = json.dumps(body_json, indent=2, ensure_ascii=False) # indent=2 用于缩进,ensure_ascii=False 支持中文
61
+ logging.info(formatted_json)
62
+ except json.JSONDecodeError:
63
+ # 如果不是有效的 JSON,按原样记录文本(已包含换行处理)
64
+ logging.info(body_text)
65
  except UnicodeDecodeError:
66
  # 如果解码失败,记录原始字节信息
67
+ logging.info(f"Body (bytes): {body}")
68
 
69
  try:
70
  # 发送请求到目标服务器,允许重定向,不验证 SSL 证书(在某些情况下可能需要)