24 lines
738 B
Python
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
|