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

Azure Linux Web App中Python日志无法在流式日志显示的问题排查

Azure Linux Web App Python日志排查问题

环境与代码情况

  • 技术栈:Azure AI Search + Python后端,部署为Linux Web App
  • 目标代码文件:app/backend/approaches/charreadretrieveread.py
  • 核心代码片段:
async def run_until_final_call(
        self,
        history: list[dict[str, str]],
        overrides: dict[str, Any],
        auth_claims: dict[str, Any],
        should_stream: bool = False,
    ) -> tuple[dict[str, Any], Coroutine[Any, Any, Union[ChatCompletion, AsyncStream[ChatCompletionChunk]]]]:
        #print("/chat user question: " , history[-1])
        logging.basicConfig(level=logging.INFO)
        logging.info('Hello, logging!')
  • Web服务日志配置:
level: verbose
application logging: file system
quota: 35 mb
retention periods(days): 1

问题

代码无报错,但Azure门户「后端->流式日志」中无法看到Hello, logging!日志,请求排查原因。


排查方向及解决方案

  1. logging.basicConfig生效时机限制
    Python中logging.basicConfig仅在日志系统首次初始化时生效,若应用其他模块(如FastAPI/Flask框架)已提前初始化日志,后续调用basicConfig不会覆盖原有配置,导致logging.info使用的是旧的级别或输出渠道。
    解决:改用直接获取日志器并配置的方式:

    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    logger.info('Hello, logging!')
    
  2. 日志未输出到标准流
    Azure Linux Web App要求Python日志输出到stdout或stderr才能在流式日志中显示,默认logging.basicConfig可能将日志写入文件而非控制台。
    解决:手动配置日志处理器输出到标准输出:

    import sys
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    handler = logging.StreamHandler(sys.stdout)
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    
  3. 日志级别不匹配
    虽然Azure门户配置了verbose(对应Python的DEBUG级别),但如果应用全局日志级别被设为WARNING及以上,INFO级别的日志会被过滤。
    解决:检查应用是否有全局日志级别设置,确保至少为INFO或更低。

  4. 流式日志延迟
    Azure流式日志存在几分钟的延迟,并非实时显示,可等待2-3分钟后刷新页面查看,或到「日志文件」选项卡确认是否生成了日志文件。

  5. 日志存储配额或权限问题
    若当前日志文件已占满35MB配额,新日志无法写入;另外Linux Web App进程可能缺乏日志目录写入权限。
    解决:到「日志文件」选项卡查看文件生成情况,配额不足则清理旧日志或调整配额;权限问题可尝试重启Web App。

  6. 异步函数未被触发
    日志位于异步函数run_until_final_call中,需确认该函数是否被正常调用。若函数未执行,自然不会输出日志。
    解决:临时添加print语句测试,或梳理函数调用链路确认执行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:52:17