Files
remnawave-bedolaga-telegram…/app/middlewares/logging.py
2025-09-23 05:53:13 +03:00

42 lines
1.6 KiB
Python

import logging
import time
from typing import Callable, Dict, Any, Awaitable
from aiogram import BaseMiddleware
from aiogram.types import Message, CallbackQuery, TelegramObject
logger = logging.getLogger(__name__)
class LoggingMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: TelegramObject,
data: Dict[str, Any]
) -> Any:
start_time = time.time()
try:
if isinstance(event, Message):
user_info = f"@{event.from_user.username}" if event.from_user.username else f"ID:{event.from_user.id}"
text = event.text or event.caption or "[медиа]"
logger.info(f"📩 Сообщение от {user_info}: {text}")
elif isinstance(event, CallbackQuery):
user_info = f"@{event.from_user.username}" if event.from_user.username else f"ID:{event.from_user.id}"
logger.info(f"🔘 Callback от {user_info}: {event.data}")
result = await handler(event, data)
execution_time = time.time() - start_time
if execution_time > 1.0:
logger.warning(f"⏱️ Медленная операция: {execution_time:.2f}s")
return result
except Exception as e:
execution_time = time.time() - start_time
logger.error(f"❌ Ошибка при обработке события за {execution_time:.2f}s: {e}")
raise