如何让Serilog使用appsettings.json中Logging节点的LogLevel配置最小日志级别
Serilog配置中使用原生
LogLevel节点设置最小日志级别的问题解答 核心结论
默认情况下无法直接使用.NET原生的Logging:LogLevel节点替代Serilog的MinimumLevel节点配置最小输出级别。
原因说明
Logging:LogLevel是微软官方日志抽象层的约定配置节点,仅对微软原生的日志实现生效。Serilog作为第三方日志框架,自身的配置解析逻辑仅识别约定的MinimumLevel节点作为全局最小日志级别的配置入口,默认不会主动读取Logging:LogLevel节点的内容,所以才会出现原配置中LogLevel被忽略的情况,你补充MinimumLevel节点后的修复配置符合Serilog的默认配置约定,因此可以正常生效。
替代方案(无需添加MinimumLevel节点的实现方式)
如果要复用现有LogLevel配置,不需要额外加MinimumLevel节点,可以在Serilog初始化时手动做配置映射,示例代码如下:
// 读取appsettings配置 var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); // 初始化Serilog时手动映射LogLevel节点配置 Log.Logger = new LoggerConfiguration() // 映射全局默认日志级别 .MinimumLevel.Is(Enum.Parse<Serilog.Events.LogEventLevel>(config["Logging:LogLevel:Default"])) // 映射命名空间级别的日志覆盖规则 .MinimumLevel.Override("Microsoft", Enum.Parse<Serilog.Events.LogEventLevel>(config["Logging:LogLevel:Microsoft"])) .MinimumLevel.Override("Microsoft.Hosting.Lifetime", Enum.Parse<Serilog.Events.LogEventLevel>(config["Logging:LogLevel:Microsoft.Hosting.Lifetime"])) // 配置日志输出路径 .WriteTo.File(config["Logging:FilePath"]) .CreateLogger();
注意:如果使用Serilog官方的
ReadFrom.Configuration()扩展方法直接加载配置,依旧只会识别MinimumLevel节点,不会自动映射LogLevel的内容。
内容的提问来源于stack exchange,提问作者Анатолій Тимошенко
相关产品推荐
相关产品推荐

