.NET 8 Worker Service中如何结合HostApplicationBuilder使用Serilog?
在.NET 8中使用HostApplicationBuilder集成Serilog
前置准备
确保已安装Serilog.AspNetCore NuGet包,若需控制台、文件等日志输出目标,额外安装对应Sink包(如Serilog.Sinks.Console、Serilog.Sinks.File)。
代码修改步骤
.NET 8默认模板使用HostApplicationBuilder,替换默认日志系统为Serilog的操作如下:
- 在
Program.cs中,创建HostApplicationBuilder后配置Serilog并替换默认日志提供器:
var builder = Host.CreateApplicationBuilder(args); // 从配置文件读取Serilog设置并初始化日志实例 Serilog.Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .CreateLogger(); // 清除默认日志提供器,添加Serilog作为唯一日志实现 builder.Logging.ClearProviders(); builder.Logging.AddSerilog(); // 继续原有服务配置(如MVC、数据库服务等) builder.Services.AddControllers(); var host = builder.Build(); // 增加启动/异常日志处理,保证日志完整性 try { Log.Information("应用启动中"); await host.RunAsync(); } catch (Exception ex) { Log.Fatal(ex, "应用意外终止"); } finally { Log.CloseAndFlush(); }
- 在配置文件(如
appsettings.json)中添加Serilog配置示例:
{ "Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "./logs/app-log-.txt", "rollingInterval": "Day", "retainedFileCountLimit": 30 } } ], "Enrich": [ "FromLogContext", "WithMachineName" ] } }
关键说明
- 调用
ClearProviders()是为了移除.NET默认日志提供器,避免日志重复输出; ReadFrom.Configuration(builder.Configuration)会自动读取配置文件中Serilog节点的规则,无需硬编码日志逻辑;- 程序退出前必须调用
Log.CloseAndFlush(),确保所有待写入日志都被持久化。
内容的提问来源于stack exchange,提问作者giorgi02
相关产品推荐
相关产品推荐

