import logging import sys import os from logging.handlers import RotatingFileHandler from pathlib import Path def create_logger( name: str = "factuges-sync", *, level: int = logging.INFO, log_path: str | None = None, ) -> logging.Logger: """ Crea un logger: - SIEMPRE stdout (Docker-friendly) - SOLO EN PRODUCCIÓN añade RotatingFileHandler si log_path no es None """ logger = logging.getLogger(name) logger.setLevel(level) # No duplicar handlers si ya existe el logger if logger.handlers: return logger formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") # ------------------------------------------------------------------ # 1) Consola → SIEMPRE (para docker logs) # ------------------------------------------------------------------ h_console = logging.StreamHandler(sys.stdout) h_console.setFormatter(formatter) logger.addHandler(h_console) # ------------------------------------------------------------------ # 2) Fichero → SOLO en prod + si se define log_path # ------------------------------------------------------------------ environment = os.getenv("ENV", "development") if environment == "production" and log_path: Path(log_path).parent.mkdir(parents=True, exist_ok=True) h_file = RotatingFileHandler( log_path, maxBytes=5 * 1024 * 1024, backupCount=15, encoding="utf8", ) h_file.setFormatter(formatter) logger.addHandler(h_file) return logger # logger "global" ya creado logger = create_logger()