You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用logger.propagate/logger.disabled导致FastAPI应用挂起的原因

问题原因

直接禁用uvicorn.error日志或者关闭它的日志传播,会打乱Uvicorn内部的启动逻辑。Uvicorn在启动过程中(比如绑定端口、初始化事件循环阶段),依赖这个日志组件处理内部状态通知和错误反馈,强行禁用后,部分同步操作会因为缺少日志相关的信号触发而阻塞,最终导致启动挂起。

解决建议
  • 调整日志级别而非直接禁用:把日志级别设为最高,只保留严重错误输出,既能减少日志量又不会干扰内部逻辑:
    import logging
    logger = logging.getLogger('uvicorn.error')
    logger.setLevel(logging.CRITICAL)
    
  • 使用Uvicorn官方配置控制日志:启动时通过命令行参数直接配置更稳妥:
    uvicorn app.main:app --host 0.0.0.0 --port 5001 --log-level critical
    
    也可以在代码中通过run函数指定配置:
    from uvicorn import run
    if __name__ == "__main__":
        run(
            "app.main:app",
            host="0.0.0.0",
            port=5001,
            log_level="critical"
        )
    
  • 用空日志处理器替代禁用操作:如果需要完全屏蔽输出,给uvicorn.error添加空处理器并关闭传播,这样不会破坏内部的日志调用逻辑:
    import logging
    from logging.handlers import NullHandler
    
    logger = logging.getLogger('uvicorn.error')
    logger.addHandler(NullHandler())
    logger.propagate = False
    

内容的提问来源于stack exchange,提问作者Sam Comber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:07:08