C# .NET核心Topshelf服务和Serilog

C# .NET核心Topshelf服务和Serilog,c#,.net-core,serilog,topshelf,C#,.net Core,Serilog,Topshelf,我正在使用.NETCore3.1和Topshelf和Serilog构建一个Windows服务。 如果我只运行exe,Serilog工作正常。 如果我使用“MyServiceApp.exe start”作为服务启动,则会创建日志文件并写入一些初始日志。但仅此而已。我的服务什么都没有 2020-03-18 13:38:33.389 +01:00 [INF] Args: ["start"] 2020-03-18 13:38:33.452 +01:00 [INF] Configuration Resul

我正在使用.NETCore3.1和Topshelf和Serilog构建一个Windows服务。 如果我只运行exe,Serilog工作正常。 如果我使用“MyServiceApp.exe start”作为服务启动,则会创建日志文件并写入一些初始日志。但仅此而已。我的服务什么都没有

2020-03-18 13:38:33.389 +01:00 [INF] Args: ["start"]
2020-03-18 13:38:33.452 +01:00 [INF] Configuration Result:
[Success] Name MyService
[Success] Description MyService.
[Success] ServiceName MyService
2020-03-18 13:38:33.458 +01:00 [INF] Topshelf v4.2.1.215, .NET Framework v3.1.0
2020-03-18 13:38:33.474 +01:00 [DBG] Starting MyService
2020-03-18 13:38:34.226 +01:00 [INF] The MyService service was started.
Program.cs:

var exeRootFolder = Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
var configuration = new ConfigurationBuilder()
.SetBasePath(exeRootFolder)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
HostFactory.Run(windowsService =>
{
windowsService.UseSerilog(Log.Logger);
windowsService.Service<RabbitMQServiceAgent>(sc =>
{
sc.ConstructUsing(hs => new MyService());
sc.WhenStarted((s, h) => s.Start(h));
sc.WhenStopped((s, h) => s.Stop(h));
});

windowsService.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(10)));
windowsService.SetServiceName("MyService");
windowsService.SetDisplayName("MyService");
windowsService.SetDescription("MyService.");
});

我重新编写了服务以使用Worker服务,现在Serilog运行良好

您在任何地方都可以访问IServiceCollection吗?为什么不使用a而不是TopShelf?随着core 3 imo中工人服务的增加,不再需要TopShelf。请检查您的appsettings.json(以及任何appsettings.MyEnvironmentName.json)以确保日志记录没有过滤任何内容。感谢Tyler Hundley!我重新编写了服务以使用Worker服务,现在Serilog运行良好。这是一个很好的问题,您与响应者进行了交互,自我回答并完成了所有工作。但请修改格式,以便人们可以阅读,我就可以将我的向下一票转换为向上一票
public class MyService : ServiceControl
{
public MyService()
{

}

public bool Start(HostControl hostControl)
{
Log.Information("Starting Service");

var myThread = new System.Threading.Thread(new System.Threading.ThreadStart(foreverWhile));
myThread.IsBackground = true;
myThread.Start();

return true;
}
public void foreverWhile()
{
while (true)
{
// to do something forever
Log.Debug("foreverWhile");
System.Threading.Thread.Sleep(2000);
}
}

public bool Stop(HostControl hostControl)
{
Log.Information("Stopping Service");

return true;
}
}
}