Spaces:
Running
Running
| import logging | |
| import sys | |
| from pathlib import Path | |
| from src.config.constants import DEFAULT_LOG_FILE_NAME | |
| def get_logger( | |
| name: str, log_dir: Path | None = None, level: str = "INFO" | |
| ) -> logging.Logger: | |
| """ | |
| Create and return a reusable logger. | |
| Why this helper exists: | |
| - keeps logs consistent | |
| - writes logs to console | |
| - optionally writes logs to file | |
| - avoids duplicate handlers | |
| """ | |
| logger = logging.getLogger(name) | |
| if logger.handlers: | |
| return logger | |
| logger.setLevel(getattr(logging, level.upper(), logging.INFO)) | |
| logger.propagate = False | |
| formatter = logging.Formatter( | |
| fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", | |
| datefmt="%Y-%m-%d %H:%M:%S", | |
| ) | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setFormatter(formatter) | |
| logger.addHandler(console_handler) | |
| if log_dir is not None: | |
| log_dir.mkdir(parents=True, exist_ok=True) | |
| file_handler = logging.FileHandler( | |
| log_dir / DEFAULT_LOG_FILE_NAME, encoding="utf-8" | |
| ) | |
| file_handler.setFormatter(formatter) | |
| logger.addHandler(file_handler) | |
| return logger | |