fix(logging): detach preflight stderr handler when scan logging starts

This commit is contained in:
Alex Schapiro
2026-08-07 17:14:43 +00:00
parent 78d92ddd83
commit f170619d45
2 changed files with 43 additions and 9 deletions
+12
View File
@@ -168,6 +168,17 @@ def attach_preflight_logging(*, debug: bool | None = None) -> None:
logging.getLogger(name).setLevel(logging.WARNING)
def remove_preflight_logging() -> None:
"""Detach any preflight stderr handler from the tracked logger roots."""
for name in _TRACKED_ROOTS:
tracked = logging.getLogger(name)
for handler in list(tracked.handlers):
if getattr(handler, _PREFLIGHT_HANDLER_TAG, False):
tracked.removeHandler(handler)
with contextlib.suppress(Exception):
handler.close()
def setup_scan_logging(run_dir: Path, *, debug: bool | None = None) -> Callable[[], None]:
"""Attach scan-scoped handlers; return a teardown callable.
@@ -185,6 +196,7 @@ def setup_scan_logging(run_dir: Path, *, debug: bool | None = None) -> Callable[
time. Safe to call from a ``finally`` block.
"""
configure_dependency_logging()
remove_preflight_logging()
debug = debug_logging_enabled(debug=debug)
+31 -9
View File
@@ -11,20 +11,26 @@ from strix.interface.main import (
_format_connection_error_detail,
)
from strix.telemetry import logging as tlog
from strix.telemetry.logging import attach_preflight_logging, debug_logging_enabled
from strix.telemetry.logging import (
attach_preflight_logging,
debug_logging_enabled,
remove_preflight_logging,
setup_scan_logging,
)
if TYPE_CHECKING:
from pathlib import Path
import pytest
def _remove_preflight_handlers() -> None:
for tracked_name in ("strix", "openai.agents"):
tracked = logging.getLogger(tracked_name)
for handler in list(tracked.handlers):
if getattr(handler, tlog._PREFLIGHT_HANDLER_TAG, False):
tracked.removeHandler(handler)
handler.close()
def _preflight_handlers(name: str) -> list[logging.Handler]:
return [
handler
for handler in logging.getLogger(name).handlers
if getattr(handler, tlog._PREFLIGHT_HANDLER_TAG, False)
]
def test_exception_messages_walks_cause_chain_to_ssl_error() -> None:
@@ -77,4 +83,20 @@ def test_attach_preflight_logging_emits_debug_to_stderr(
captured = capsys.readouterr()
assert "LLM warm-up failed" in captured.err
finally:
_remove_preflight_handlers()
remove_preflight_logging()
def test_setup_scan_logging_removes_preflight_handler(
monkeypatch: pytest.MonkeyPatch,
tmp_path: Path,
) -> None:
monkeypatch.delenv("STRIX_DEBUG", raising=False)
attach_preflight_logging()
assert _preflight_handlers("strix")
teardown = setup_scan_logging(tmp_path)
try:
for name in ("strix", "openai.agents"):
assert not _preflight_handlers(name)
finally:
teardown()