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

部署后Python Azure Timer Trigger函数日志未在Azure Monitor显示

问题分析与解决步骤

1. 修正代码分支逻辑

你的模型下载和日志记录代码被包裹在if mytimer.past_due:分支中,这意味着只有当定时器触发逾期时,这段代码才会执行。如果定时器是正常按时触发的,该分支不会进入,自然看不到模型相关日志。

调整代码,将模型处理逻辑移出逾期判断分支,确保每次触发都执行:

import datetime
import logging
import azure.functions as func
from azureml.core import Model

def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()

    # 移出逾期判断分支,确保每次触发都执行模型下载与日志记录
    keys = model_file.keys()
    logging.info("downloading the following models:")
    for key in keys:
        logging.info(f"Downloading model: {key}")  # 明确标注日志内容
        model_obj = Model(ws, key)
        model_path = model_obj.download(target_dir=downloaded_models_path)
        logging.info(f"Model {key} downloaded to path: {model_path}")  # 用logging替代print

    # 仅在定时器逾期时记录警告
    if mytimer.past_due:
        logging.warning("Timer trigger is past due!")

    logging.info(
        "download_ml_models timer trigger function ran at %s", utc_timestamp)

2. 替换print为logging

Azure Functions中print()的输出不会自动同步到Azure Monitor,必须使用logging模块的方法(如logging.info()、logging.warning())才能让日志被系统收集并展示。

3. 确认日志级别配置

检查函数应用的日志级别设置:

  • 进入Azure门户的函数应用,转到配置 > 应用程序设置
  • 查看AzureFunctionsJobHost__logging__logLevel__Default配置项,确保值为Information或更低级别(如Debug),这样logging.info()的日志才会被输出。

4. 验证诊断设置

确保函数应用已配置将日志发送到Azure Monitor:

  • 转到函数应用的诊断设置
  • 确认已启用发送到Log Analytics工作区,并且勾选了FunctionAppLogs类别

5. 在Azure Monitor中查询日志

在Log Analytics中查询AppTraces表查看函数日志,示例查询语句:

AppTraces
| where AppName == "你的函数应用名称"
| where Message contains "downloading the following models" or Message contains "Downloading model"
| order by TimeGenerated desc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:35:11