sgl-project/sglang · error · ValueError

SGLANG_LOG_SCHEDULER_STATUS_TARGET is set but --enable-metri

Error message

SGLANG_LOG_SCHEDULER_STATUS_TARGET is set but --enable-metrics is not active. Status dumps require --enable-metrics to work.

What it means

Scheduler status dumps driven by SGLANG_LOG_SCHEDULER_STATUS_TARGET are implemented on top of the metrics pipeline, so the logger refuses to be created when metrics are disabled. maybe_create() reads the env var and, if set while enable_metrics is False, raises immediately at startup. This is a configuration-consistency guard rather than a runtime failure.

Source

Thrown at python/sglang/srt/utils/scheduler_status_logger.py:29

if TYPE_CHECKING:
    from sglang.srt.managers.schedule_batch import Req, ScheduleBatch


class SchedulerStatusLogger:
    def __init__(self, targets: List[str], dump_interval: float):
        self.loggers = create_log_targets(targets=targets, name_prefix=__name__)
        self.dump_interval = dump_interval
        self.last_dump_time = 0.0
        self.rank = dist.get_rank() if dist.is_initialized() else 0

    @staticmethod
    def maybe_create(enable_metrics: bool) -> Optional[SchedulerStatusLogger]:
        target = envs.SGLANG_LOG_SCHEDULER_STATUS_TARGET.get()
        if not target:
            return None

        if not enable_metrics:
            raise ValueError(
                "SGLANG_LOG_SCHEDULER_STATUS_TARGET is set but --enable-metrics "
                "is not active. Status dumps require --enable-metrics to work."
            )

        return SchedulerStatusLogger(
            targets=[t.strip() for t in target.split(",") if t.strip()],
            dump_interval=envs.SGLANG_LOG_SCHEDULER_STATUS_INTERVAL.get(),
        )

    def maybe_dump(
        self, running_batch: ScheduleBatch, waiting_queue: List[Req]
    ) -> None:
        now = time.time()
        if now - self.last_dump_time < self.dump_interval:
            return

        self.last_dump_time = now
        log_json(

View on GitHub (pinned to 0132848349)

Solutions

  1. Add --enable-metrics to the server launch arguments (or config file)
  2. Unset SGLANG_LOG_SCHEDULER_STATUS_TARGET if status dumps are not needed
  3. Audit deployment scripts/env files for stale SGLANG_LOG_SCHEDULER_STATUS_TARGET values

Example fix

# before
SGLANG_LOG_SCHEDULER_STATUS_TARGET=/tmp/status.log python -m sglang.launch_server ...
# after
SGLANG_LOG_SCHEDULER_STATUS_TARGET=/tmp/status.log python -m sglang.launch_server --enable-metrics ...
Defensive patterns

Strategy: validation

Validate before calling

import os
from sglang.srt.utils import scheduler_status_logger  # or read via envs
need = bool(os.environ.get("SGLANG_LOG_SCHEDULER_STATUS_TARGET"))
assert not need or enable_metrics, "set --enable-metrics or unset SGLANG_LOG_SCHEDULER_STATUS_TARGET"

Prevention

When it happens

Trigger: Launching the server with SGLANG_LOG_SCHEDULER_STATUS_TARGET=... in the environment but without --enable-metrics on the command line (or in the YAML config), so maybe_create(enable_metrics=False) is reached with a non-empty target string.

Common situations: Ops sets the env var on one node but the launch template lacks --enable-metrics; or metrics were disabled to reduce overhead while a leftover env var from a debug session persists.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/b4a0ffad54fcb7ce. Report an issue: GitHub.