我尝试使用 Serilog 从 dotnet 6.0 控制台应用程序登录到控制台和 Azure 应用程序见解。我正在从 appsettings.json 文件加载配置。
但是,在启动时,我遇到了异常:
An unhandled exception of type 'System.InvalidOperationException' occurred in Serilog.Settings.Configuration.dll: 'Type Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights was not found.'
at Serilog.Settings.Configuration.StringArgumentValue.ConvertTo(Type toType, ResolutionContext resolutionContext)
at Serilog.Settings.Configuration.ConfigurationReader.<>c__DisplayClass21_2.<CallConfigurationMethods>b__3(<>f__AnonymousType9`2 <>h__TransparentIdentifier0)
at System.Linq.Utilities.<>c__DisplayClass2_0`3.<CombineSelectors>b__0(TSource x)
at System.Linq.Enumerable.SelectListPartitionIterator`2.ToList()
at Serilog.Settings.Configuration.ConfigurationReader.CallConfigurationMethods(ILookup`2 methods, IList`1 configurationMethods, Object receiver)
at Serilog.Settings.Configuration.ConfigurationReader.Configure(LoggerConfiguration loggerConfiguration)
at Serilog.Configuration.LoggerSettingsConfiguration.Settings(ILoggerSettings settings)
我从 Serilog 网站和其他地方的各种示例中选取了代码。谁能看出我的代码有什么问题吗?
我这里有一个示例程序,可以构建和演示所遇到的问题:
https://github.com/ossentoo/testlogger
程序.cs
// See https://aka.ms/new-console-template for more information
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
IServiceProvider _serviceProvider;
ILogger<Program> _logger;
Console.WriteLine("Hello, World!");
var config = InitConfiguration();
IConfiguration InitConfiguration()
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
var services = new ServiceCollection();
services.AddLogging(configure => configure.AddSerilog())
.AddTransient<Program>();
services.Configure<LoggerFilterOptions>(options => options.MinLevel = LogLevel.Debug);
_serviceProvider = services.BuildServiceProvider();
_logger = _serviceProvider.GetService<ILogger<Program>>();
_logger.LogInformation("Logger initialized!");
var loggerFactory = _serviceProvider.GetService<ILoggerFactory>();
_logger = loggerFactory.CreateLogger<Program>();
return configuration;
}
应用程序设置.json
https://raw.githubusercontent.com/ossentoo/testlogger/main/appsettings.json
请随意分叉代码并发出更改和拉取请求。
谢谢
结果 Serilog telemetryConverter 的 appsettings.json 文件类型名称已更改为:
Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights
到
Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights
我也有同样的问题。如果使用 .net6,请卸载 NuGet-Package Serilog.Sinks.ApplicationInsights 4.0.0 并安装 Serilog.Sinks.ApplicationInsights 3.1.0。至少我的问题解决了。