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

.NET 6 Azure Functions:获取非弃用TelemetryConfiguration配置Serilog

.NET 6 Azure Functions v4:Serilog Application Insights Sink 非弃用配置方案

依赖包准备

确保项目安装以下NuGet包:

  • Serilog.Sinks.ApplicationInsights
  • Microsoft.Azure.Functions.Extensions
  • Microsoft.ApplicationInsights.Worker
  • Serilog.Extensions.Logging

核心配置步骤

问题出在直接获取TelemetryConfiguration前未完成Application Insights服务的正确注册。Azure Functions v4需要先通过AddApplicationInsightsTelemetryWorkerService()完成服务注册,该方法会自动读取APPLICATIONINSIGHTS_CONNECTION_STRING并初始化配置。

Startup.cs 配置示例

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Serilog.Sinks.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

[assembly: FunctionsStartup(typeof(YourAppNamespace.Startup))]
namespace YourAppNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            // 注册Application Insights Worker服务,自动加载连接字符串配置
            builder.Services.AddApplicationInsightsTelemetryWorkerService();

            // 从DI容器获取已初始化的TelemetryConfiguration
            var telemetryConfig = builder.Services.BuildServiceProvider().GetRequiredService<TelemetryConfiguration>();

            // 配置Serilog多Sink
            Log.Logger = new LoggerConfiguration()
                .WriteTo.Console() // 示例:控制台Sink
                .WriteTo.ApplicationInsights(telemetryConfig, TelemetryConverter.Traces)
                .CreateLogger();

            // 将Serilog设置为默认日志提供器
            builder.Services.AddLogging(loggingBuilder =>
            {
                loggingBuilder.ClearProviders();
                loggingBuilder.AddSerilog();
            });
        }
    }
}

Program.cs 顶级语句配置(.NET 6推荐)

如果使用顶级语句模式,配置更简洁:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
    })
    .UseSerilog((context, services, config) => config
        .WriteTo.Console()
        .WriteTo.ApplicationInsights(
            services.GetRequiredService<TelemetryConfiguration>(),
            TelemetryConverter.Traces))
    .Build();

host.Run();

关键注意点

  • 禁止直接使用TelemetryConfiguration.CreateDefault():该方法不会读取Azure Functions的环境配置,导致连接字符串未加载,日志无法上报。
  • 必须先调用AddApplicationInsightsTelemetryWorkerService():这是初始化TelemetryConfiguration的核心步骤,确保配置与Functions环境对齐。
  • 验证配置:本地开发时检查local.settings.json,部署后检查Azure应用设置中的APPLICATIONINSIGHTS_CONNECTION_STRING是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:33