diff --git a/api_server.py b/api_server.py index b0c930b..07d7f35 100644 --- a/api_server.py +++ b/api_server.py @@ -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 \ No newline at end of file