Initial commit
This commit is contained in:
46
middleware/logging_middleware.py
Normal file
46
middleware/logging_middleware.py
Normal file
@@ -0,0 +1,46 @@
|
||||
# middleware/logging_middleware.py
|
||||
import logging
|
||||
import time
|
||||
from fastapi import Request, Response
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
from typing import Callable
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class LoggingMiddleware(BaseHTTPMiddleware):
|
||||
"""Middleware for request/response logging and performance monitoring"""
|
||||
|
||||
async def dispatch(self, request: Request, call_next: Callable) -> Response:
|
||||
# Start timing
|
||||
start_time = time.time()
|
||||
|
||||
# Log request
|
||||
client_ip = request.client.host if request.client else "unknown"
|
||||
logger.info(f"Request: {request.method} {request.url.path} from {client_ip}")
|
||||
|
||||
# Process request
|
||||
try:
|
||||
response = await call_next(request)
|
||||
|
||||
# Calculate duration
|
||||
duration = time.time() - start_time
|
||||
|
||||
# Log response
|
||||
logger.info(
|
||||
f"Response: {response.status_code} for {request.method} {request.url.path} "
|
||||
f"({duration:.3f}s)"
|
||||
)
|
||||
|
||||
# Add performance headers
|
||||
response.headers["X-Process-Time"] = str(duration)
|
||||
|
||||
return response
|
||||
|
||||
except Exception as e:
|
||||
duration = time.time() - start_time
|
||||
logger.error(
|
||||
f"Error: {str(e)} for {request.method} {request.url.path} "
|
||||
f"({duration:.3f}s)"
|
||||
)
|
||||
raise
|
||||
Reference in New Issue
Block a user