67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
"""Configuración de logging con rotación."""
|
|
|
|
import logging
|
|
from logging.handlers import RotatingFileHandler
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
from ..constants import LOGS_DIR
|
|
|
|
|
|
def setup_logger(
|
|
name: str,
|
|
log_file: Optional[str] = None,
|
|
level: int = logging.INFO,
|
|
max_bytes: int = 10 * 1024 * 1024, # 10MB
|
|
backup_count: int = 10
|
|
) -> logging.Logger:
|
|
"""
|
|
Configura un logger con rotación de archivos.
|
|
|
|
Args:
|
|
name: Nombre del logger
|
|
log_file: Nombre del archivo de log (opcional)
|
|
level: Nivel de logging
|
|
max_bytes: Tamaño máximo del archivo antes de rotar
|
|
backup_count: Número de archivos de backup a mantener
|
|
|
|
Returns:
|
|
Logger configurado
|
|
"""
|
|
logger = logging.getLogger(name)
|
|
logger.setLevel(level)
|
|
|
|
# Evitar duplicar handlers
|
|
if logger.handlers:
|
|
return logger
|
|
|
|
# Formato
|
|
formatter = logging.Formatter(
|
|
'%(asctime)s | %(name)s | %(levelname)s | %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S'
|
|
)
|
|
|
|
# Handler de consola
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setFormatter(formatter)
|
|
logger.addHandler(console_handler)
|
|
|
|
# Handler de archivo (si se especifica)
|
|
if log_file:
|
|
LOGS_DIR.mkdir(parents=True, exist_ok=True)
|
|
log_path = LOGS_DIR / log_file
|
|
|
|
file_handler = RotatingFileHandler(
|
|
log_path,
|
|
maxBytes=max_bytes,
|
|
backupCount=backup_count,
|
|
encoding='utf-8'
|
|
)
|
|
file_handler.setFormatter(formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
return logger
|
|
|
|
|
|
# Logger principal de la aplicación
|
|
app_logger = setup_logger("CloudRestoreAS", "app.log")
|