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

使用.NET Isolated运行时的Azure Functions无法通过Serilog写入App Insights

修复.NET 6 Isolated Azure Functions Serilog写入Application Insights失败问题

核心问题排查

  • 缺少Instrumentation Key配置:配置文件和代码中均未指定Application Insights的Instrumentation Key,Serilog无法定位目标日志实例。
  • 重复配置Sink:代码同时通过ReadFrom.Configuration加载配置文件中的AI Sink,又额外调用.WriteTo.ApplicationInsights,导致配置冲突。
  • Isolated环境适配不足:Dotnet-isolated模式下,Serilog注册方式未贴合Worker Host生命周期要求。

修复步骤

1. 确认安装必要NuGet包

确保项目已安装以下稳定版包:

Serilog
Serilog.Sinks.ApplicationInsights
Serilog.Extensions.Hosting
Serilog.Settings.Configuration

2. 调整program.cs配置

移除重复的Sink配置,改用配置文件统一加载,并添加环境变量支持:

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("logConfig.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables() // 加载Azure环境变量,包含AI密钥
    .Build();

var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.AddLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddSerilog(logger, dispose: true); // 确保Logger随Host释放
        });
    })
    .Build();

await host.RunAsync();

3. 更新logConfig.json配置

添加Instrumentation Key(推荐通过环境变量引用,避免硬编码):

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft.AspNetCore": "Warning",
        "Microsoft.Azure.Functions.Worker": "Warning" // 适配Isolated Worker日志级别
      }
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "instrumentationKey": "%APPINSIGHTS_INSTRUMENTATIONKEY%", // 引用环境变量
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "SerilogTestApplication"
    }
  }
}

4. 验证与补充配置

  • 你的结构化日志写法_logger.LogInformation("xxxxxxx with invoice number: {invoiceNumber}", invoiceNumber)是正确的,修复后invoiceNumber会作为自定义维度出现在Application Insights的Trace日志中。
  • 本地调试:在local.settings.json中添加AI密钥:
    {
      "Values": {
        "APPINSIGHTS_INSTRUMENTATIONKEY": "你的Instrumentation Key",
        "AzureWebJobsStorage": "UseDevelopmentStorage=true"
      }
    }
    
  • 云端部署:在Azure Portal的Function App应用程序设置中添加APPINSIGHTS_INSTRUMENTATIONKEY,值对应你的Application Insights实例密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:50