karl/app/web/middlewares.py
2025-10-22 22:54:55 +02:00

24 lines
850 B
Python

import logging
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.requests import Request
logger = logging.getLogger(__name__)
class LoggingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
client = f"{request.client.host}:{request.client.port}"
match request.method:
case "POST" | "PUT" | "DELETE" if request.headers.get("Content-Type") == "application/json":
body = await request.body()
logger.trace(f"Request from {client}: {body.decode()}")
case "GET":
logger.trace(f"Request from {client}")
case _:
logger.trace(f"Request from {client} (content-type:{request.headers.get("Content-Type")})")
response = await call_next(request)
logger.trace(f"Respone: {response.status_code} {type(response)}")
return response