""" Logging utilities for the temporal reasoning dataset pipeline. """ import logging import sys from pathlib import Path from typing import Optional def setup_logger( name: str, log_file: Optional[str] = None, level: str = "INFO", console_output: bool = True ) -> logging.Logger: """ Set up a logger with file and/or console handlers. Args: name: Name of the logger log_file: Path to log file (if None, only console logging) level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL) console_output: Whether to output logs to console Returns: Configured logger instance """ logger = logging.getLogger(name) logger.setLevel(getattr(logging, level.upper())) # Remove existing handlers to avoid duplicates logger.handlers = [] # Create formatter formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # Console handler if console_output: console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(getattr(logging, level.upper())) console_handler.setFormatter(formatter) logger.addHandler(console_handler) # File handler if log_file: log_path = Path(log_file) log_path.parent.mkdir(parents=True, exist_ok=True) file_handler = logging.FileHandler(log_file) file_handler.setLevel(getattr(logging, level.upper())) file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger