import logging from typing import Optional try: from rich.logging import RichHandler except Exception: # pragma: no cover - optional RichHandler = None # type: ignore[assignment] def configure_logging(level: int = logging.INFO, name: Optional[str] = None) -> logging.Logger: logger_name = name or "primepy" logger = logging.getLogger(logger_name) if logger.handlers: return logger logger.setLevel(level) if RichHandler is not None: handler: logging.Handler = RichHandler(rich_tracebacks=True, markup=True) else: handler = logging.StreamHandler() formatter = logging.Formatter( fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) if not isinstance(handler, type) and hasattr(handler, "setFormatter"): handler.setFormatter(formatter) logger.addHandler(handler) logger.propagate = False return logger