| import time |
| import logging |
| from fastapi import Request |
| from fastapi.responses import Response |
| from starlette.middleware.base import BaseHTTPMiddleware |
|
|
| logger = logging.getLogger(__name__) |
|
|
| class LoggingMiddleware(BaseHTTPMiddleware): |
| async def dispatch(self, request: Request, call_next) -> Response: |
| start_time = time.time() |
| try: |
| response = await call_next(request) |
| duration = time.time() - start_time |
| if duration > 1.0: |
| logger.info(f"{request.method} {request.url.path} - {response.status_code} - {duration:.2f}s") |
| return response |
| except Exception as e: |
| duration = time.time() - start_time |
| logger.error(f"{request.method} {request.url.path} failed - {e} - {duration:.2f}s") |
| raise |
|
|