如何添加Serilog作为非唯一日志提供方并读取appSettings.json配置?
解决方案
要同时满足保留原有日志提供方和从appSettings.json读取Serilog配置这两个需求,你需要结合AddSerilog()方法与手动加载配置的方式,具体步骤如下:
1. 安装必要NuGet包
确保已安装Serilog.AspNetCore和Serilog.Settings.Configuration,这两个包分别负责ASP.NET Core集成和JSON配置读取。
2. 正确初始化代码
不要使用会替换所有日志提供方的builder.Host.UseSerilog(),改用以下方式配置:
// 从appSettings.json加载Serilog配置 var loggerConfig = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration); // 创建Serilog Logger实例 var logger = loggerConfig.CreateLogger(); // 将Serilog添加为日志提供方,保留原有提供方 builder.Logging.AddSerilog(logger, dispose: true);
3. appSettings.json配置示例
确保配置文件中包含Serilog节点,示例如下:
{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "logs/log-.txt", "rollingInterval": "Day" } } ] } }
关键说明
builder.Logging.AddSerilog()本身不会自动读取配置,必须先通过LoggerConfiguration.ReadFrom.Configuration()加载appSettings中的配置,创建实例后再传入该方法。dispose: true参数用于确保应用关闭时正确释放Serilog资源。- 这种配置方式会保留ASP.NET Core原生的日志提供方(如Console、Debug),Serilog作为额外的提供方接收日志输出。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

