【发布时间】:2021-10-15 03:07:33
【问题描述】:
我按照Serilog instructions 向我的应用程序添加了一个非常基本的日志文件。
我可以通过以下方式重现它:
- 使用 Visual Studio 创建了一个新的
ASP.NET Core Web Api,默认参数为:.NET 5,无身份验证,配置为 HTTPS,启用 OpenAPI 支持 - 安装了
Serilog.AspNetCore包 - 安装了
Microsoft.Extensions.Hosting.WindowsServices包(所以我可以调用UseWindowsService()扩展方法) - 将我的
Program.cs类编辑如下:
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.File("logs.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
try
{
Log.Information("Starting Web Host");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
- 从 app.settings 中删除了 Logging 部分:
{
"AllowedHosts": "*"
}
到目前为止,当我从 Visual Studio 或 Windows 资源管理器运行 Web api 时,一切正常:文件 logs.txt 已按预期创建,并且 Web api 处于活动状态。
但是,当我创建一个 Windows 服务来运行应用程序时:
sc.exe create TestService binPath="path\to\WebApplication1.exe"
尽管 web api 运行良好,但没有创建日志文件。
这是我尝试过的一些事情:
- 更改了使用我自己的帐户运行服务的用户 => 没有变化
- 删除了对
UseWindowsService()的调用 => web api 没有启动 - 使用了另一个提供程序 (NLog) => 相同的行为:未创建日志文件
- 在
UseWindowsService()和UseSerilog()之间切换呼叫 => 没有变化 - 在
ConfigureWebHostDefaults()之后调用UseWindowsService()和UseSerilog()(按两个顺序)=> 没有变化
我做错了什么?可能整个 run as a windows service 部分不是将我的 Web api 作为服务运行的最佳方式吗?
【问题讨论】:
标签: c# serilog asp.net-core-5.0