geo/backend/app/middleware/logging_middleware.py

24 lines
738 B
Python

import time
import logging
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
logger = logging.getLogger("geo.access")
class RequestLoggingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
start_time = time.time()
client_ip = request.client.host if request.client else "unknown"
response = await call_next(request)
duration = round((time.time() - start_time) * 1000, 2)
logger.info(
f"{request.method} {request.url.path} "
f"status={response.status_code} "
f"duration={duration}ms "
f"ip={client_ip}"
)
return response