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