Add RequestLoggingMiddleware to log request and response details in API server

This commit is contained in:
vvzvlad
2025-03-22 14:50:59 +03:00
parent d3fe2c1b71
commit f5f80487ce
+19 -1
View File
@@ -14,13 +14,14 @@ asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
import magic
from pyrogram import errors
from starlette.background import BackgroundTask
from fastapi import FastAPI, HTTPException, Response
from fastapi import FastAPI, HTTPException, Response, Request
from fastapi.responses import HTMLResponse, FileResponse
from telegram_client import TelegramClient
from config import get_settings
from rss_generator import generate_channel_rss, generate_channel_html
from post_parser import PostParser
from url_signer import verify_media_digest
from starlette.middleware.base import BaseHTTPMiddleware
@@ -52,6 +53,7 @@ async def lifespan(_: FastAPI):
await client.stop()
app = FastAPI( title="Pyrogram Bridge", lifespan=lifespan)
app.add_middleware(RequestLoggingMiddleware)
def mask_sensitive_value(input_str: str) -> str:
"""Mask middle part of sensitive value, showing only first and last 4 characters"""
@@ -607,3 +609,19 @@ async def get_rss_feed(channel: str,
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