# PR #22506 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[gateway] Support SGLANG_LOG_MS for millisecond precision in router logs
- 合并时间：2026-04-14 08:28
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/22506

---

# 执行摘要

该 PR 为 Rust 网关（sgl-model-gateway）的日志系统添加了对 SGLANG_LOG_MS 环境变量的支持，允许用户启用毫秒级时间戳精度，从而与 Python SRT 的现有行为对齐。变更仅涉及单个文件的日志格式配置，风险低，影响范围有限，属于常规的功能增强。

# 功能与动机

主要动机是统一 Rust 网关和 Python SRT 的日志行为，如 PR body 所述："matching the existing Python SRT behavior (PR #14183)"。当用户设置 `SGLANG_LOG_MS=true`（或 `1`）时，日志时间戳将从 "2026-04-10 06:35:37" 变为 "2026-04-10 06:35:37.313"，提供更精细的时间信息，便于调试和性能分析。

# 实现拆解

所有变更集中在 `sgl-model-gateway/src/observability/logging.rs` 文件中：

1. **新增时间格式常量**：
   ```rust
   const TIME_FORMAT_MS: &str = "%Y-%m-%d %H:%M:%S%.3f";
   ```

2. **新增格式选择函数**：
   ```rust
   fn get_time_format() -> &'static str {
       match std::env::var("SGLANG_LOG_MS") {
           Ok(v) if matches!(v.trim().to_lowercase().as_str(), "true" | "1") => TIME_FORMAT_MS,
           _ => TIME_FORMAT,
       }
   }
   ```

3. **修改日志初始化**：在 `init_logging` 函数中，将原先硬编码的 `TIME_FORMAT` 替换为 `get_time_format()` 的返回值，并同时应用到 `stdout_layer` 和 `file_layer`。

# 评论区精华

review 中仅有一次实质性讨论：

> **gemini-code-assist[bot]**指出："The environment variable check is currently case-sensitive and only accepts exact matches for 'true' or '1'. For better usability and robustness, it's recommended to handle case-insensitivity (e.g., 'TRUE', 'True') and potentially trim whitespace."

该建议提供了具体的代码改进方案，但 PR 作者在最终提交中未采纳，保持了原有的简单实现。

# 风险与影响

**风险分析**：
- 环境变量解析逻辑相对简单，对大小写敏感，可能导致某些配置下功能不生效（如用户设置 `"TRUE"`）。
- 变更仅影响日志格式，不涉及核心业务逻辑，回归风险极低。
- 无新增测试覆盖，但日志格式变更通常不需要复杂测试。

**影响评估**：
- 对用户：提供了可选的毫秒级时间戳，增强调试能力，但需显式设置环境变量。
- 对系统：仅改变日志输出格式，不影响网关的路由、推理等核心功能。
- 对团队：统一了 Rust 网关和 Python SRT 的日志行为，减少了跨组件调试时的差异。

# 关联脉络

根据 PR body 提及，该 PR 是为了与 **PR #14183**（Python SRT 的日志行为）保持一致，体现了项目在跨组件（Rust 网关 vs Python SRT）可观测性行为统一上的持续努力。从近期历史 PR 看，项目在 observability 领域有多项改进（如 PR 22331、22730），该 PR 是这一趋势的延续。