import os import logging from logging.handlers import RotatingFileHandler # Ensure logs directory exists at the project root PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) LOGS_DIR = os.path.join(PROJECT_ROOT, "logs") os.makedirs(LOGS_DIR, exist_ok=True) LOG_FILE = os.path.join(LOGS_DIR, "model_io.log") def get_logger(name: str) -> logging.Logger: """ Returns a configured logger with a RotatingFileHandler. Logs are written to logs/model_io.log with a max size of 5MB and 3 backups. """ logger = logging.getLogger(name) # Only configure if no handlers are present to avoid duplicate logs if not logger.handlers: logger.setLevel(logging.INFO) # 5 MB max per file, keep 3 old copies file_handler = RotatingFileHandler( LOG_FILE, maxBytes=5 * 1024 * 1024, backupCount=3, encoding='utf-8' ) file_handler.setLevel(logging.INFO) # Optional: Console handler for real-time visibility console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) file_handler.setFormatter(formatter) console_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.addHandler(console_handler) return logger