Spaces:
Sleeping
Sleeping
| """Centralised logging configuration for the project.""" | |
| from __future__ import annotations | |
| import logging | |
| from logging import Logger | |
| from pathlib import Path | |
| from typing import Optional | |
| def get_logger(name: str, log_file: Optional[str] = None) -> Logger: | |
| """Return a configured logger instance.""" | |
| logger = logging.getLogger(name) | |
| if logger.handlers: | |
| return logger | |
| logger.setLevel(logging.INFO) | |
| formatter = logging.Formatter( | |
| fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", | |
| datefmt="%Y-%m-%d %H:%M:%S", | |
| ) | |
| stream_handler = logging.StreamHandler() | |
| stream_handler.setFormatter(formatter) | |
| logger.addHandler(stream_handler) | |
| if log_file: | |
| log_path = Path(log_file) | |
| log_path.parent.mkdir(parents=True, exist_ok=True) | |
| file_handler = logging.FileHandler(log_path, encoding="utf-8") | |
| file_handler.setFormatter(formatter) | |
| logger.addHandler(file_handler) | |
| logger.propagate = False | |
| return logger | |
| __all__ = ["get_logger"] | |