.NET 6.0控制台应用启动时Serilog对接Azure Application Insights抛异常
解决Serilog集成Azure Application Insights时的类型找不到异常
问题根源
异常提示找不到Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter类型,核心原因是配置文件中TelemetryConverter的命名空间路径错误,存在重复的Sinks.ApplicationInsights段;同时需确认项目已正确安装相关依赖包。
解决方案
1. 修正appsettings.json中的TelemetryConverter配置
打开appsettings.json,定位到Serilog的Application Insights接收器配置,将TelemetryConverter的类型路径修改为正确格式:
"TelemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
(原配置多嵌套了一层Sinks.ApplicationInsights,导致类型查找失败)
2. 确认安装必要的NuGet包
确保项目已安装以下兼容版本的NuGet包:
SerilogSerilog.Sinks.ConsoleSerilog.Sinks.ApplicationInsightsSerilog.Settings.ConfigurationMicrosoft.Extensions.Configuration.JsonMicrosoft.Extensions.DependencyInjectionMicrosoft.Extensions.Logging
可通过Package Manager Console执行安装命令:
Install-Package Serilog Install-Package Serilog.Sinks.Console Install-Package Serilog.Sinks.ApplicationInsights Install-Package Serilog.Settings.Configuration Install-Package Microsoft.Extensions.Configuration.Json Install-Package Microsoft.Extensions.DependencyInjection Install-Package Microsoft.Extensions.Logging
3. 优化Program.cs代码(可选)
针对.NET 6控制台应用的顶级语句特性,可简化代码并优化日志初始化流程:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; Console.WriteLine("Hello, World!"); // 加载配置文件 var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); // 初始化Serilog日志实例 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); try { // 构建依赖注入容器 var services = new ServiceCollection(); services.AddLogging(configure => configure.AddSerilog()) .AddTransient<Program>(); services.Configure<LoggerFilterOptions>(options => options.MinLevel = LogLevel.Debug); var serviceProvider = services.BuildServiceProvider(); var logger = serviceProvider.GetRequiredService<ILogger<Program>>(); logger.LogInformation("Logger initialized!"); } catch (Exception ex) { Log.Fatal(ex, "Application terminated unexpectedly"); } finally { Log.CloseAndFlush(); } // 用于承载泛型日志的临时类 public class Program { }
验证
修改完成后重新运行项目,类型找不到的异常会消失,日志将同时输出到控制台和Azure Application Insights。
内容的提问来源于stack exchange,提问作者ossentoo
相关产品推荐
相关产品推荐

