24 lines
850 B
Python
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
|