""" Módulo de Logging Centralizado - Bots de Traducción Proporciona loggers rotativos por día para Discord, Telegram y Panel Web. """ import logging import os from logging.handlers import TimedRotatingFileHandler # Directorio base para almacenar los logs (respeta el volumen de Docker /app/data) _DEFAULT_LOG_DIR = "/app/data/logs" _LOCAL_LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "logs") LOG_DIR = _DEFAULT_LOG_DIR if os.path.exists("/app/data") else _LOCAL_LOG_DIR os.makedirs(LOG_DIR, exist_ok=True) def _create_logger(name: str, filename: str, level=logging.INFO) -> logging.Logger: """Crea y configura un logger con salida a archivo rotativo y a consola.""" logger = logging.getLogger(name) if logger.handlers: return logger # Ya está configurado, no duplicar handlers logger.setLevel(level) formatter = logging.Formatter( "[%(asctime)s] %(levelname)s [%(name)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) # Handler de archivo: rota a medianoche, guarda los últimos 14 días file_handler = TimedRotatingFileHandler( os.path.join(LOG_DIR, filename), when="midnight", interval=1, backupCount=14, encoding="utf-8" ) file_handler.setFormatter(formatter) file_handler.suffix = "%Y-%m-%d.log" # Handler de consola para visualización en Docker console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.addHandler(console_handler) return logger # Loggers disponibles para cada componente del ecosistema discord_logger = _create_logger("discord_bot", "discord.log") telegram_logger = _create_logger("telegram_bot", "telegram.log") panel_logger = _create_logger("panel_web", "panel.log")