设置最低日志级别为全大写DEBUG时Serilog崩溃的问题咨询
解答
核心结论
Serilog的日志级别默认是区分大小写的,这就是你配置全大写"DEBUG"时程序崩溃的原因。
问题原因分析
从你提供的异常堆栈信息能看到,Serilog.Settings.Configuration.ConfigurationReader.ParseLogEventLevel方法在解析全大写的"DEBUG"时失败了——因为Serilog默认的LogEventLevel枚举对应的字符串值是首字母大写的格式(比如Debug、Information),并不识别全大写的写法。
解决方案
1. 标准配置写法(推荐)
直接把配置里的全大写级别改成首字母大写的格式,这是Serilog官方预期的配置方式:
"Serilog": { "MinimumLevel": { "Default": "Debug" } }
修改后程序就能正常加载日志级别,不会再抛出异常。
2. 自定义大小写不敏感解析(可选)
如果你的场景必须使用全大写的配置值,可以通过自定义逻辑扩展Serilog的配置解析。比如在初始化Logger时,手动处理级别的大小写转换:
var levelStr = Configuration.GetValue<string>("Serilog:MinimumLevel:Default"); if (Enum.TryParse<LogEventLevel>(levelStr, ignoreCase: true, out var level)) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Is(level) // 其他日志配置项 .CreateLogger(); }
不过这种方式需要额外编写代码,一般优先推荐使用标准配置写法。
验证预期行为
使用标准的首字母大写格式配置后,程序就能正常识别日志级别,不会再抛出The value DEBUG is not a valid Serilog level.的异常,完全符合你预期的“提供大写形式日志级别时不抛出异常”的需求(只要使用官方支持的格式即可)。
内容的提问来源于stack exchange,提问作者ganesh
相关产品推荐
相关产品推荐

