V2 Pro: Logging rotativo, Redis cache, Health Check de LibreTranslate y Rate Limiting en botones (#7)
This commit is contained in:
50
utils/logger.py
Normal file
50
utils/logger.py
Normal file
@@ -0,0 +1,50 @@
|
||||
"""
|
||||
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
|
||||
LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "logs")
|
||||
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")
|
||||
Reference in New Issue
Block a user