"""Configure dedicated eval run logs under repo ``logs/`` (see ``constants.EVAL_*_LOG_*``).""" from __future__ import annotations import logging import sys from .constants import EVAL_LOG_DIR, EVAL_LOG_FILE, EVAL_VERBOSE_LOG_DIR _setup_done = False def setup_eval_logging() -> None: """Attach file + stderr handlers to ``search_eval`` once; ensure log directories exist.""" global _setup_done if _setup_done: return EVAL_LOG_DIR.mkdir(parents=True, exist_ok=True) EVAL_VERBOSE_LOG_DIR.mkdir(parents=True, exist_ok=True) fmt = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s") root = logging.getLogger("search_eval") root.setLevel(logging.INFO) if root.handlers: _setup_done = True return fh = logging.FileHandler(EVAL_LOG_FILE, encoding="utf-8") fh.setFormatter(fmt) sh = logging.StreamHandler(sys.stderr) sh.setFormatter(fmt) root.addHandler(fh) root.addHandler(sh) root.propagate = False _setup_done = True