""" Sistema de logging centralizado para todo el proyecto. Uso: from src.utils.logger import get_logger; logger = get_logger(__name__) """ import logging import sys from pathlib import Path from datetime import datetime def get_logger(name: str, level: int = logging.INFO) -> logging.Logger: """ Devuelve un logger configurado con salida a consola y archivo. Args: name: Nombre del logger (usar __name__ en cada módulo). level: Nivel de logging. Returns: Logger configurado. """ logger = logging.getLogger(name) if logger.handlers: return logger logger.setLevel(level) formatter = logging.Formatter( "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) # Handler consola console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # Handler archivo log_dir = Path("logs") log_dir.mkdir(exist_ok=True) log_file = log_dir / f"pipeline_{datetime.now().strftime('%Y%m%d')}.log" file_handler = logging.FileHandler(log_file) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger