""" logger.py --------- Logging setup for training and evaluation runs. """ import logging import sys from pathlib import Path from typing import Optional def setup_logger( name: str, log_file: Optional[str] = None, level: int = logging.INFO, ) -> logging.Logger: """ Create and configure a logger. Args: name: logger name log_file: optional path to write logs to file level: logging level Returns: Configured logger """ logger = logging.getLogger(name) logger.setLevel(level) # Avoid duplicate handlers if logger.handlers: return logger formatter = logging.Formatter( fmt = "[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s", datefmt = "%Y-%m-%d %H:%M:%S", ) # Console handler console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(level) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler (optional) if log_file is not None: Path(log_file).parent.mkdir(parents=True, exist_ok=True) file_handler = logging.FileHandler(log_file) file_handler.setLevel(level) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger