from datetime import datetime, timezone from typing import Callable from starlette.requests import Request from starlette.responses import Response async def request_logging_middleware(request: Request, call_next: Callable) -> Response: timestamp = datetime.now(timezone.utc).astimezone() response: Response = await call_next(request) print(f"{timestamp.isoformat()} {request.method} {request.url.path} {response.status_code} {response.headers.get("content-length")} \"{request.headers.get("user-agent") or '-'}\"") return response