From 95985f983d27df175f3e80351a6748e2fd77a15a Mon Sep 17 00:00:00 2001 From: Tianhe Date: Mon, 11 May 2026 10:31:03 -0700 Subject: [PATCH] feat(trace): support SGLANG_TRACE_LEVEL env var for startup trace level (#24716) Co-authored-by: Claude Sonnet 4.6 --- docs/references/production_request_trace.md | 9 +++++++-- python/sglang/srt/observability/trace.py | 2 +- test/registered/unit/observability/test_trace.py | 9 +++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/references/production_request_trace.md b/docs/references/production_request_trace.md index d1dfdd2f0..4fbe12584 100644 --- a/docs/references/production_request_trace.md +++ b/docs/references/production_request_trace.md @@ -52,9 +52,14 @@ This section explains how to configure the request tracing and export the trace 0: disable tracing 1: Trace important slices 2: Trace all slices except nested ones - 3: Trace all slices + 3: Trace all slices (default) ``` - The trace level can be dynamically set via HTTP API, for example: + **At startup** — set `SGLANG_TRACE_LEVEL` before launching the server: + ```bash + SGLANG_TRACE_LEVEL=2 python -m sglang.launch_server --enable-trace --otlp-traces-endpoint 0.0.0.0:4317 + ``` + + **At runtime** — dynamically adjust via HTTP API without restarting: ```bash curl http://0.0.0.0:30000/set_trace_level?level=2 ``` diff --git a/python/sglang/srt/observability/trace.py b/python/sglang/srt/observability/trace.py index be0c84191..a7cc4cfdd 100644 --- a/python/sglang/srt/observability/trace.py +++ b/python/sglang/srt/observability/trace.py @@ -32,7 +32,7 @@ opentelemetry_initialized = False _trace_context_propagator = None tracer: Optional[trace.Tracer] = None -global_trace_level = 3 +global_trace_level = get_int_env_var("SGLANG_TRACE_LEVEL", 3) TRACE_HEADERS = ["traceparent", "tracestate"] diff --git a/test/registered/unit/observability/test_trace.py b/test/registered/unit/observability/test_trace.py index 82d7a5005..7fce827ad 100644 --- a/test/registered/unit/observability/test_trace.py +++ b/test/registered/unit/observability/test_trace.py @@ -56,6 +56,15 @@ class TestTraceFunctions(unittest.TestCase): self.assertEqual(mod.global_trace_level, 5) mod.global_trace_level = orig + def test_global_trace_level_env_var(self): + import importlib + + with patch.dict(os.environ, {"SGLANG_TRACE_LEVEL": "2"}): + importlib.reload(mod) + self.assertEqual(mod.global_trace_level, 2) + importlib.reload(mod) # restore default (SGLANG_TRACE_LEVEL unset → 3) + self.assertEqual(mod.global_trace_level, 3) + def test_get_global_tracing_enabled(self): self.assertEqual(get_global_tracing_enabled(), mod.opentelemetry_initialized)