Skip to content

config_refresh

azure_bootstrap.config_refresh

Dynamic log-level refresh via App Configuration.

Wire refresh_log_flags into APScheduler at CronTrigger(minute='*') so ops can flip the App Config key and see it take effect within 60s without redeploying.

Functions:

Name Description
refresh_log_flags

Re-read named settings from App Config, then reapply logging if the

refresh_log_flags

refresh_log_flags(settings: Iterable[str] = ('DEBUG_LOGGING_ENABLED', 'LOG_LEVEL')) -> None

Re-read named settings from App Config, then reapply logging if the effective level changed. Best-effort end-to-end.

Source code in azure_bootstrap/config_refresh/__init__.py
def refresh_log_flags(
    settings: Iterable[str] = ("DEBUG_LOGGING_ENABLED", "LOG_LEVEL"),
) -> None:
    """Re-read named settings from App Config, then reapply logging if the
    effective level changed. Best-effort end-to-end.
    """
    if _mock_enabled():
        return
    try:
        prev_level = logging.getLogger().getEffectiveLevel()

        # Step 1: read remote settings via the v2 ``refresh_setting`` hook.
        try:
            import azure_bootstrap

            refresh = getattr(azure_bootstrap, "refresh_setting", None)
            if callable(refresh):
                refresh(*settings)
            else:
                _logger.debug("log_flag_refresh: no refresh_setting available")
        except ImportError:
            _logger.debug("log_flag_refresh: no bootstrap importable")
        except Exception as exc:  # noqa: BLE001
            bump_counter("log_flag_refresh.remote_read_failed")
            _logger.warning(
                "log_flag_refresh: remote read raised",
                extra={"exception_type": type(exc).__name__, "error": str(exc)[:300]},
            )
            try:
                from azure_bootstrap.alerts import AlertSeverity, alert_dev_team

                alert_dev_team(
                    AlertSeverity.WARN,
                    subject="App Config refresh raised inside refresh_log_flags",
                    context={
                        "exception_type": type(exc).__name__,
                        "error": str(exc)[:300],
                    },
                    dedup_key="log_flag_refresh_remote_failed",
                )
            except Exception:
                pass

        # Step 2: re-apply logging if the level actually changed.
        target_level = effective_log_level()
        if target_level != prev_level:
            bump_counter("log_flag_refresh.level_changed")
            _logger.info(
                "log_flag_refresh: re-applying logging",
                extra={
                    "operation": "log_flag_refresh",
                    "prev_level": prev_level,
                    "new_level": target_level,
                },
            )
            configure_logging()
        else:
            _logger.debug("log_flag_refresh: no level change")
    except Exception:
        bump_counter("log_flag_refresh.crashed")
        _logger.exception("log_flag_refresh: crashed")