access_middleware.py 768 B

123456789101112131415161718192021
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import Request, Response
  4. from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
  5. from common.log import log
  6. from utils.timezone import timezone
  7. class AccessMiddleware(BaseHTTPMiddleware):
  8. """请求日志中间件"""
  9. async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
  10. start_time = timezone.now()
  11. response = await call_next(request)
  12. end_time = timezone.now()
  13. log.info(
  14. f'{request.client.host: <15} | {request.method: <8} | {response.status_code: <6} | '
  15. f'{request.url.path} | {round((end_time - start_time).total_seconds(), 3) * 1000.0}ms'
  16. )
  17. return response