""" Настройка системы логирования с использованием loguru """ import sys from loguru import logger from config import config def setup_logging(): """Настройка системы логирования""" # Удаляем стандартный обработчик loguru logger.remove() # Настраиваем логирование в stderr для Docker log_level = "DEBUG" if config.DEBUG else "INFO" # Основной обработчик для stderr (для Docker) logger.add( sys.stderr, level=log_level, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}", colorize=True, backtrace=True, diagnose=True ) # Дополнительный обработчик для файла (опционально) if config.DEBUG: logger.add( "logs/bot.log", level="DEBUG", format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}", rotation="10 MB", retention="7 days", compression="zip", backtrace=True, diagnose=True ) # Настраиваем логирование для внешних библиотек import logging # Отключаем логирование aiogram по умолчанию logging.getLogger("aiogram").setLevel(logging.WARNING) logging.getLogger("aiohttp").setLevel(logging.WARNING) logging.getLogger("aiosqlite").setLevel(logging.WARNING) # Перенаправляем стандартное логирование в loguru class InterceptHandler(logging.Handler): def emit(self, record): # Получаем соответствующий уровень loguru try: level = logger.level(record.levelname).name except ValueError: level = record.levelno # Находим caller из логов frame, depth = logging.currentframe(), 2 while frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 logger.opt(depth=depth, exception=record.exc_info).log( level, record.getMessage() ) # Подключаем перехватчик к корневому логгеру logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True) logger.info("🔧 Система логирования loguru настроена") logger.info(f"📊 Уровень логирования: {log_level}") logger.info(f"🐳 Логи выводятся в stderr для Docker") def get_logger(name: str = None): """Получить логгер для модуля""" if name: return logger.bind(name=name) return logger # Инициализируем логирование при импорте setup_logging()