From d6df00ff8c2f835205813edd8f4cca885730beee Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Sat, 22 Mar 2025 14:54:05 +0300 Subject: [PATCH] Refactor RequestLoggingMiddleware to ensure proper logging of request and response details, including error handling during request processing --- api_server.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/api_server.py b/api_server.py index 07d7f35..a6ee63d 100644 --- a/api_server.py +++ b/api_server.py @@ -23,8 +23,21 @@ from post_parser import PostParser from url_signer import verify_media_digest from starlette.middleware.base import BaseHTTPMiddleware - - +class RequestLoggingMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + # Log request details + logger.info(f"Request: {request.method} {request.url}") + logger.info(f"Headers: {dict(request.headers)}") + logger.info(f"Query params: {dict(request.query_params)}") + + try: + response = await call_next(request) + # Log response details + logger.info(f"Response status: {response.status_code}") + return response + except Exception as e: + logger.error(f"Request processing error: {str(e)}") + raise logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) @@ -52,7 +65,7 @@ async def lifespan(_: FastAPI): pass await client.stop() -app = FastAPI( title="Pyrogram Bridge", lifespan=lifespan) +app = FastAPI(title="Pyrogram Bridge", lifespan=lifespan) app.add_middleware(RequestLoggingMiddleware) def mask_sensitive_value(input_str: str) -> str: @@ -608,20 +621,4 @@ async def get_rss_feed(channel: str, except Exception as e: error_message = f"rss_generation_error: channel {channel}, error {str(e)}" logger.error(error_message) - raise HTTPException(status_code=500, detail=error_message) from e - -class RequestLoggingMiddleware(BaseHTTPMiddleware): - async def dispatch(self, request: Request, call_next): - # Log request details - logger.info(f"Request: {request.method} {request.url}") - logger.info(f"Headers: {dict(request.headers)}") - logger.info(f"Query params: {dict(request.query_params)}") - - try: - response = await call_next(request) - # Log response details - logger.info(f"Response status: {response.status_code}") - return response - except Exception as e: - logger.error(f"Request processing error: {str(e)}") - raise \ No newline at end of file + raise HTTPException(status_code=500, detail=error_message) from e \ No newline at end of file