import logging import os from typing import Final DEFAULT_LOG_LEVEL: Final[str] = "INFO" DEFAULT_LOG_FORMAT: Final[str] = ( "%(asctime)s | %(levelname)s | %(name)s | %(message)s" ) _configured = False def _resolve_log_level() -> int: level_name = os.getenv("LOG_LEVEL", DEFAULT_LOG_LEVEL).upper() return getattr(logging, level_name, logging.INFO) def setup_logging() -> None: global _configured if _configured: return root_logger = logging.getLogger() root_logger.setLevel(_resolve_log_level()) if not root_logger.handlers: handler = logging.StreamHandler() handler.setFormatter(logging.Formatter(DEFAULT_LOG_FORMAT)) root_logger.addHandler(handler) _configured = True def get_logger(name: str) -> logging.Logger: setup_logging() return logging.getLogger(name)