"""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"]