logs.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. """请求日志查询接口"""
  2. from fastapi import APIRouter
  3. from app.middleware import get_request_log, clear_request_log
  4. router = APIRouter(tags=["logs"])
  5. @router.get("/api/v1/logs")
  6. async def list_logs(
  7. limit: int = 100,
  8. path: str = None,
  9. method: str = None,
  10. status: int = None,
  11. ):
  12. """
  13. 获取请求日志(最近 N 条)
  14. - limit: 返回条数(默认100,最大500)
  15. - path: 路径过滤(支持模糊)
  16. - method: 方法过滤(GET/POST)
  17. - status: 状态码过滤
  18. """
  19. logs = get_request_log()
  20. if limit and 0 < limit <= 500:
  21. logs = logs[:limit]
  22. if path:
  23. logs = [l for l in logs if path.lower() in l.get("path", "").lower()]
  24. if method:
  25. logs = [l for l in logs if l.get("method", "").upper() == method.upper()]
  26. if status:
  27. logs = [l for l in logs if l.get("status") == status]
  28. return {"total": len(get_request_log()), "count": len(logs), "logs": logs}
  29. @router.post("/api/v1/logs/clear")
  30. async def clear_logs():
  31. """清空请求日志"""
  32. n = clear_request_log()
  33. return {"cleared": n}