Prhub

#20379 [Diffusion] Add `--uvicorn-access-log-exclude-prefixes` to suppress noisy access logs

原始 PR 作者 alphabetc1 合并时间 2026-04-01 09:31 文件变更 2 提交数 1 评论 2 代码增减 +65 / -2

执行摘要

为 diffusion 服务器添加 uvicorn 访问日志前缀排除功能,减少噪声日志。

PR body中指出:在生产环境中,高频轮询端点如/health(路由器探测)会产生大量uvicorn访问日志条目,淹没有意义的请求日志。LLM已支持通过--uvicorn-access-log-exclude-prefixes过滤,但diffusion服务器缺乏此能力,因此添加此功能以保持一致性和降低日志噪声。

该PR值得快速浏览,关注日志过滤器的实现细节(如_UvicornAccessLogFilter类中从record.args提取路径的方法),但无需深入分析,因变更较小且直白。

讨论亮点

Review过程中没有评论,只有BBuf的批准,表明变更被直接接受,未引发技术讨论或争议。

实现拆解

实现分为两个关键文件:1. 在python/sglang/multimodal_gen/runtime/server_args.py中,为ServerArgs类添加uvicorn_access_log_exclude_prefixes字段,并在add_cli_args中添加命令行参数解析。2. 在python/sglang/multimodal_gen/runtime/utils/logging_utils.py中,修改set_uvicorn_logging_configs函数以接受server_args参数,并新增_install_access_log_filter函数和_UvicornAccessLogFilter类,该类通过检查record.args中的路径前缀来过滤日志记录。

文件 模块 状态 重要度
python/sglang/multimodal_gen/runtime/server_args.py diffusion/runtime modified 5.0
python/sglang/multimodal_gen/runtime/utils/logging_utils.py diffusion/runtime/utils modified 6.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

ServerArgs.uvicorn_access_log_exclude_prefixes add_cli_args set_uvicorn_logging_configs _install_access_log_filter _UvicornAccessLogFilter.filter

评论区精华

无讨论 other

Review 过程中没有评论,只有 BBuf 的批准,表明变更被直接接受。

结论:PR 被批准并合并,无争议。 · 已解决

风险与影响

技术风险包括:1. 日志过滤可能意外屏蔽重要请求路径,如果前缀配置错误或空字符串被误处理(代码中已通过清理逻辑避免,但依赖用户输入)。2. 缺少单元测试覆盖新功能,可能引入回归问题(PR body中的检查表示未添加单元测试)。3. 修改set_uvicorn_logging_configs函数签名,可能影响调用者,但当前调用位置已适配。

对用户影响:diffusion服务器用户现在可以过滤噪声日志,提升生产环境日志可读性,但需正确配置前缀。对系统影响:仅在日志处理路径添加过滤逻辑,不影响核心推理性能。对团队影响:与LLM功能对齐,促进代码一致性,但增加了维护点。

日志过滤可能意外屏蔽 缺少单元测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

执行摘要

该PR为sglang的diffusion服务器添加了--uvicorn-access-log-exclude-prefixes命令行参数,允许用户过滤高频轮询端点(如/health)产生的噪声uvicorn访问日志。变更涉及配置参数添加和日志过滤器实现,影响范围限于diffusion模块,提升了生产环境日志可读性。

功能与动机

动机源于生产环境中高频轮询端点(如健康检查)产生的uvicorn访问日志过多,会淹没有意义的请求日志。PR body中明确指出:“LLM already supports filtering these via --uvicorn-access-log-exclude-prefixes, but the diffusion server lacks this capability.” 因此,此PR旨在为diffusion服务器提供相同的日志过滤能力,以降低噪声并保持与LLM功能的一致性。

实现拆解

实现分为两个关键部分:

  • 配置参数添加:在python/sglang/multimodal_gen/runtime/server_args.py中,为ServerArgs类添加uvicorn_access_log_exclude_prefixes字段,并在add_cli_args函数中添加命令行解析逻辑。代码片段:
    uvicorn_access_log_exclude_prefixes: list[str] = field(default_factory=list)
    parser.add_argument(
        "--uvicorn-access-log-exclude-prefixes",
        type=str,
        nargs="*",
        default=[],
        help="Exclude uvicorn access logs whose request path starts with any of these prefixes."
    )
    
  • 日志过滤逻辑:在python/sglang/multimodal_gen/runtime/utils/logging_utils.py中,修改set_uvicorn_logging_configs函数以接受server_args参数,并新增_install_access_log_filter函数和_UvicornAccessLogFilter类。过滤器通过检查uvicorn日志记录的args元组中的路径前缀来实现过滤,关键代码:
    class _UvicornAccessLogFilter(logging.Filter):
        def filter(self, record: logging.LogRecord) -> bool:
            args = record.args
            if isinstance(args, tuple) and len(args) >= 3:
                path = str(args[2]).split("?", 1)[0]
                return not path.startswith(self.prefixes)
            return True
    

评论区精华

Review过程中无评论,仅BBuf批准合并。这表明变更被直接接受,未引发技术讨论或设计争议。

风险与影响

风险

  • 日志过滤可能意外屏蔽重要请求路径,如果用户配置错误的前缀(如空字符串),但代码中通过清理逻辑([str(p) for p in prefixes if p])缓解。
  • 缺少单元测试覆盖新功能,PR body中的检查表示未添加单元测试,可能引入回归问题。
  • 修改set_uvicorn_logging_configs函数签名,但当前调用位置(configure_logger)已适配,影响有限。

影响

  • 对用户:diffusion服务器用户现在可以过滤噪声日志,提升日志可读性,但需谨慎配置前缀。
  • 对系统:仅影响日志处理路径,不改变核心推理逻辑,性能影响可忽略。
  • 对团队:与LLM功能对齐,促进代码一致性,但增加了少量维护负担。

关联脉络

从历史PR看,PR 21005同样修改了server_args.py文件(但属于srt模块),展示了配置参数添加的常见模式。本PR与LLM现有功能关联,体现了跨模块功能对齐的趋势,但历史PR中无直接修改相同文件的diffusion相关PR,表明此变更为独立改进。

参与讨论