.NET 6 Azure Functions:获取非弃用TelemetryConfiguration配置Serilog
.NET 6 Azure Functions v4:Serilog Application Insights Sink 非弃用配置方案
依赖包准备
确保项目安装以下NuGet包:
Serilog.Sinks.ApplicationInsightsMicrosoft.Azure.Functions.ExtensionsMicrosoft.ApplicationInsights.WorkerSerilog.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
相关产品推荐
相关产品推荐

