"""Bridge Python stdlib logging into the OTel LoggerProvider. The OTel Operator's Python auto-instrumentation creates a LoggerProvider with an OTLP BatchLogRecordProcessor, but it does not attach a LoggingHandler bridge to Python's root logger — so stdlib logger.info(...) calls never reach the collector. Call configure_otlp_log_handler() once at startup to close that gap. This module is part of the platform agent harness — do not edit. The canonical copy lives in the agent-harness-spec repo and is copied verbatim into each agent. If you need to change the bridge, change it there and re-roll. """ from __future__ import annotations import logging def configure_otlp_log_handler(level: int = logging.INFO) -> None: try: from opentelemetry._logs import get_logger_provider from opentelemetry.sdk._logs import LoggingHandler except ImportError: return provider = get_logger_provider() if provider is None or type(provider).__name__ == "NoOpLoggerProvider": return root = logging.getLogger() if any(isinstance(h, LoggingHandler) for h in root.handlers): return root.addHandler(LoggingHandler(level=level, logger_provider=provider)) if root.level == logging.NOTSET or root.level > level: root.setLevel(level)