Dexter Edep
Setup structure
38e0dee
import logging
from time import time
from asgi_correlation_id import CorrelationIdMiddleware
from fastapi import FastAPI, Request, Response
logger = logging.getLogger(__name__)
def init_middleware(app: FastAPI):
app.add_middleware(CorrelationIdMiddleware)
@app.middleware("http")
async def log_requests(request: Request, call_next):
start_time = time()
response: Response = await call_next(request)
process_time = (time() - start_time) * 1000
formatted_process_time = "{0:.2f}".format(process_time)
rid_header = response.headers.get("X-Request-Id")
request_id = rid_header or response.headers.get("X-Blaxel-Request-Id")
if response.status_code >= 400:
logger.error(
f"{request.method} {request.url.path} {response.status_code} {formatted_process_time}ms rid={request_id}"
)
else:
logger.info(
f"{request.method} {request.url.path} {response.status_code} {formatted_process_time}ms rid={request_id}"
)
return response