Files
traduccion_bots/utils/logger.py

53 lines
1.8 KiB
Python

"""
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")