"""Request logging middleware for timing.""" import time import logging from typing import Callable from fastapi import Request, Response from starlette.middleware.base import BaseHTTPMiddleware logger = logging.getLogger(__name__) class RequestLoggingMiddleware(BaseHTTPMiddleware): """Middleware to log request processing time.""" async def dispatch(self, request: Request, call_next: Callable) -> Response: """Process request with timing.""" start_time = time.time() # Log incoming request logger.info(f"Incoming request: {request.method} {request.url}") # Process request response = await call_next(request) # Calculate processing time process_time = time.time() - start_time # Log processing time logger.info(f"Request processed in {process_time:.4f}s - {request.method} {request.url} - Status: {response.status_code}") # Add processing time to response headers response.headers["X-Process-Time"] = str(process_time) return response