| """ |
| 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())) |
| |
| |
| logger.handlers = [] |
| |
| |
| formatter = logging.Formatter( |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s', |
| datefmt='%Y-%m-%d %H:%M:%S' |
| ) |
| |
| |
| if console_output: |
| console_handler = logging.StreamHandler(sys.stdout) |
| console_handler.setLevel(getattr(logging, level.upper())) |
| console_handler.setFormatter(formatter) |
| logger.addHandler(console_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 |
|
|