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

如何获取Azure Durable Function特定运行实例的详细日志?

问题解答

1. 是否可在函数运行结束时,通过编程方式查询并提取该特定实例(含所有活动)的所有日志条目,打包后发送邮件?

可以实现,但要先解决日志持久化的问题:

  • 首先,默认的FileSystemLogs是实例本地临时存储,函数缩容或重启后日志会丢失,所以建议在代码里把日志同时输出到Application Insights自定义追踪或者Azure Blob存储:
    • 用ILogger记录日志时,通过Logger.BeginScope将InstanceId注入每条日志的自定义维度;
    • 或者直接在代码里把日志写入Blob,按InstanceId命名文件或归类到对应文件夹。
  • 函数运行结束阶段,通过以下方式提取日志:
    • 如果用Application Insights,调用其Analytics Query API,执行Kusto查询过滤该InstanceId的所有追踪日志;
    • 如果用Blob存储,直接读取对应InstanceId的日志文件。
  • 最后把查询到的日志内容打包成文本文件,用Azure SendGrid或SMTP服务发送邮件即可。

2. 是否可事后通过函数实例ID调用特定API查询日志?

可以,主要有两种途径:

  • Application Insights REST API:使用Analytics Query API,编写Kusto查询语句(例如traces | where customDimensions['InstanceId'] == '你的实例ID'),通过API获取该实例的所有日志条目。需要给调用者配置AI的查询权限(比如Managed Identity或服务主体)。
  • Azure Blob存储API:如果之前已经把日志按InstanceId持久化到Blob,直接调用Storage的Blob读取API,获取对应文件的内容即可。

3. 我能看到文件系统LogStream,但原始日志文件存储在哪里?在Azure存储中看到的日志文件几乎无内容,仅当门户中打开文件系统LogStream控制台时才会写入日志文件,是否有办法让其持续记录?

  • 日志文件位置:
    • Windows函数实例:D:\home\LogFiles\Application\Functions\Function\<你的函数名>
    • Linux函数实例:/home/LogFiles/Application/Functions/Function/<你的函数名>
      这些是实例本地的临时存储,不属于你绑定的Azure存储账户,Azure存储里的日志是函数平台级别的调度/运行事件日志,不是代码输出的调试日志。
  • 持续记录设置:
    修改函数的host.json配置,开启持久化日志:
    {
      "logging": {
        "fileLoggingMode": "always",
        "logLevel": {
          "Default": "Information",
          "Microsoft": "Warning"
        },
        "azureBlobStorage": {
          "connectionString": "你的存储账户连接字符串",
          "containerName": "函数日志",
          "retentionInDays": 30
        }
      }
    }
    
    • fileLoggingMode设为always后,不管是否打开LogStream,都会持续把日志写入实例本地文件;
    • 配置azureBlobStorage后,本地日志会自动同步到指定的Blob容器,实现持久化存储,方便后续查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:07:18