如何将Serilog的MinimumLevel.Override配置迁移至appsettings.json?
如何将Serilog的MinimumLevel覆盖配置迁移至appsettings.json?
当然可以把MinimumLevel.Override的配置迁移到appsettings.json中,这样无需修改代码就能灵活调整日志级别,适配不同场景(比如生产环境隐藏系统日志、调试环境监控请求)。具体实现步骤如下:
1. 安装依赖包
确保项目已安装Serilog.Settings.Configuration NuGet包,它支持Serilog从配置文件读取配置项。
2. 在appsettings.json中配置Serilog
将原本硬编码的日志级别覆盖、输出模板、Enrich等配置移到appsettings.json的Serilog节点下:
{ "Serilog": { "MinimumLevel": { "Default": "Information", // 全局默认日志级别,对应代码里的minLevelLocal "Override": { "System": "Error", "Microsoft": "Error", // 调试时可以打开以下配置,生产环境注释或删除即可 "Microsoft.AspNetCore.Hosting": "Debug", "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Debug" } }, "WriteTo": [ { "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss.fff} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}" } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessName", "WithMemoryUsage" ] } }
3. 修改LoggingExtensions代码
调整Serilog初始化逻辑,改为从配置文件读取配置,替代原来的硬编码:
public static class LoggingExtensions { public static IHostBuilder AddLogging(this IHostBuilder builder, LogEventLevel minLevelLocal = LogEventLevel.Information) { return builder.UseSerilog((context, loggerConfig) => { loggerConfig .ReadFrom.Configuration(context.Configuration) // 若需要保留代码传入的minLevelLocal作为配置文件的 fallback,可保留此行 // .MinimumLevel.Is(minLevelLocal) .Enrich.FromLogContext() .Enrich.WithMachineName() .Enrich.WithProcessName() .Enrich.WithMemoryUsage(); }); } }
说明
- 配置文件中的
MinimumLevel.Override会完全替代代码里的硬编码配置,后续调整日志级别只需修改appsettings.json,无需重新编译代码。 - 可以根据环境(开发/生产)创建不同的配置文件(如
appsettings.Development.json、appsettings.Production.json),各自配置对应的日志级别覆盖规则,ASP.NET Core会自动根据环境加载对应配置。
内容的提问来源于stack exchange,提问作者nop
相关产品推荐
相关产品推荐

