53 lines
1.8 KiB
Python
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")
|