Description
Add middleware to automatically log all HTTP requests and responses for debugging and monitoring.
Implementation
# src/infrastructure/logging/request_logging_middleware.py
import time
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
class RequestLoggingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
# Generate request ID
request_id = str(uuid.uuid4())
# Log request
logger.info(
"request_started",
request_id=request_id,
method=request.method,
path=request.url.path,
client_ip=request.client.host
)
start_time = time.time()
# Process request
try:
response = await call_next(request)
# Log response
duration_ms = int((time.time() - start_time) * 1000)
logger.info(
"request_completed",
request_id=request_id,
status_code=response.status_code,
duration_ms=duration_ms
)
# Add request ID to response headers
response.headers["X-Request-ID"] = request_id
return response
except Exception as e:
duration_ms = int((time.time() - start_time) * 1000)
logger.error(
"request_failed",
request_id=request_id,
error=str(e),
duration_ms=duration_ms
)
raise
Acceptance Criteria
Files to Create
src/infrastructure/logging/request_logging_middleware.py
Files to Modify
src/core/base/base_server.py
Priority: 🟢 Low-Medium
Effort: 2-3 hours
Difficulty: Easy
Description
Add middleware to automatically log all HTTP requests and responses for debugging and monitoring.
Implementation
Acceptance Criteria
Files to Create
src/infrastructure/logging/request_logging_middleware.pyFiles to Modify
src/core/base/base_server.pyPriority: 🟢 Low-Medium
Effort: 2-3 hours
Difficulty: Easy