Skip to content

Implement request/response logging middleware #52

@eshulman2

Description

@eshulman2

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

  • Middleware implemented
  • Request ID generated for each request
  • Request logged (method, path, IP)
  • Response logged (status, duration)
  • Request ID in response headers
  • Sensitive data not logged
  • Added to all servers
  • Tests added

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    consistencyCode consistency and standardsenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions