我有一个 Windows 服务,我正在尝试升级以使用依赖注入和 Serilog。
这不是 .net 核心 Windows 服务。这是 ServiceBase 的旧样式
下面是我的记录器设置代码。
public static IServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
Log.Logger = new LoggerConfiguration()
.CreateLogger();
// app starts fine if I remove below line
services.AddLogging(builder => builder.AddSerilog());
return services.BuildServiceProvider();
}
这是我的 ServiceBase 中的 OnStart
protected override void OnStart(string[] args)
{
try
{
Log.Information("Starting Service");
Task.Run(async () =>
{
var provider = Startup.ConfigureServices();
Log.Information("Done configuring provider");
supervisor = new Supervisor(provider);
supervisor.Initialize();
await supervisor.Run();
}).ConfigureAwait(false);
}
catch (Exception e)
{
LogError(e);
}
}
当我启动服务时,我收到“正在启动服务”消息,但没有收到“完成配置提供程序”消息。然后应用程序立即崩溃并出现此错误
Faulting application name: MyWindowsService.exe, version: 4.0.3.0, time stamp: 0x606f3be8
Faulting module name: clr.dll, version: 4.7.3750.0, time stamp: 0x5fbc74bf
Exception code: 0xc0000005
Fault offset: 0x000184bd
Faulting process id: 0x13d0
Faulting application start time: 0x01d72c9c4fdd7bea
Faulting application path: C:\Program Files\MyWindowsService\MyWindowsService.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: f5fdda16-5491-4eb2-b5df-878c11b08b5c
Faulting package full name:
Faulting package-relative application ID:
我尝试在 AddSerilog 的 true 和 false 之间更改 dispose 值,但没有做任何事情。还尝试了 AddLogging()。然后从提供者那里获取 LoggerFactory 并在其上调用 AddSerilog。
注释掉 services.AddLogging(builder => builder.AddSerilog()); 允许应用程序毫无问题地运行,只是没有 ILogger 日志记录。
我的备份计划是暂时调用静态 serilog 日志。或者努力将项目更新为新的 Windows 服务 HostBuilder 内容。
如何让 Serilog 向 ILogger/ILoggerFactory 注册,以便我可以将它与此 Windows 服务一起使用?