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

Azure App Service中Flask应用Logger日志未同步至Blob存储问题

Flask应用部署Azure App Service后,logger日志未同步到Blob存储的原因及解决方法

核心原因

  • 日志输出通道差异:print语句默认输出到stdout,Azure App Service会自动捕获stdout/stderr的内容并归类到AppServiceConsoleLogs类别,这也是你能在Blob中看到print日志的原因。而当前logging.basicConfig()配置的日志默认输出到stderr,但Azure的日志收集机制需要明确开启对应类别,且日志输出需被App Service的日志系统正确捕获。
  • 诊断设置配置不全:Blob中仅出现AppServiceConsoleLogs类别的日志,说明诊断设置中可能仅开启了控制台日志,未勾选**应用日志文件(Application Logs)**类别,导致Python logging输出的日志未被收集。
  • Python logging配置未适配Azure环境:logging.basicConfig()在Flask或Azure App Service的运行环境中可能未生效,默认的日志处理器没有将日志输出到stdout/stderr,导致Azure无法捕获这些日志。

解决步骤

1. 调整Python代码的logging配置,确保日志输出到stdout

修改代码中的logging部分,强制将日志输出到标准输出流,让Azure能够捕获:

from flask import Flask, request, jsonify
import logging
import sys

app = Flask(__name__)

# 配置日志处理器,输出到stdout
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)

# 配置logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.addHandler(handler)
# 关闭日志传播,避免重复输出
logger.propagate = False

@app.route("/api1")
def api1():
    print("hello data is getting printed")
    logger.info("API1 endpoint called. Hello, data is getting printed.")
    return jsonify("Hello World")

2. 检查并更新Azure App Service的应用日志配置

  • 进入你的App Service资源,找到监控 > 应用服务日志页面
  • 开启「应用日志文件」选项,将日志级别设置为**信息(Info)**或更低(如调试Debug),点击保存。

3. 确认诊断设置的日志类别配置

  • 进入App Service的监控 > 诊断设置页面
  • 确保已勾选**应用日志文件(Application Logs)**类别,并且目标已配置为你的Blob存储账户
  • 确认日志级别筛选设置为Info或更低,确保info级别的日志会被同步到Blob

验证

重新部署修改后的代码,调用/api1接口后,等待几分钟(Azure日志同步有延迟),即可在Blob存储中看到logger.info输出的日志,对应的日志类别为AppServiceLogs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:03:25