Serilog调用.LogTrace方法无法在控制台显示该如何排查
Serilog LogTrace日志不输出问题排查与解决方案
根因定位
你当前只能输出Information及以上级别日志,本质是Serilog未读取到你设置的Trace级别配置,核心问题有两个:
- Serilog的
ReadFrom.Configuration()方法默认读取配置根目录下的Serilog节点,你将配置写在微软原生日志专用的Logging节点下,Serilog完全未加载该部分配置,默认使用了内置的Information作为最低输出级别。 - 你之前尝试的
MinimumLogLevel、LogLevel父节点都是微软原生日志体系的配置键,不符合Serilog的配置规则,自然不会生效。
分步解决步骤
步骤1:修正appsettings.json配置结构
按照Serilog的标准配置规则调整节点,示例如下:
如果你确实需要沿用"Serilog": { "MinimumLevel": { "Default": "Trace", // 可选配置:过滤系统类库的冗余低级别日志 "Override": { "Microsoft": "Warning", "System": "Warning" } } }Logging节点作为配置源,可以在读取配置时显式指定节点路径:.ReadFrom.Configuration(configRoot, configurationSectionPath: "Logging")步骤2:验证配置文件加载逻辑
确认你的configRoot初始化时已经正确加载了appsettings.json,参考代码如下:
同时检查appsettings.json文件的属性,确认「复制到输出目录」设置为「如果较新则复制」,避免输出目录没有最新配置文件。var configRoot = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build();步骤3:硬编码验证排除其他问题
如果修改配置后仍未生效,可以临时硬编码全局最低级别验证是否为配置读取环节的问题:
如果硬编码后Trace日志可以正常输出,即可锁定问题出在配置读取环节,重新核对配置节点拼写、配置文件加载逻辑即可。Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() // 临时硬编码最低级别 .ReadFrom.Configuration(configRoot) .Enrich.FromLogContext() .WriteTo.Console( outputTemplate: "{Timestamp:dd-MM} at {Timestamp:HH:mm:ss.fff} - {Level:u5} - {Message}{NewLine:l}{Exception:l}", theme: SerilogThemes.CustomLightTerminal ) .CreateLogger();步骤4:检查控制台Sink的单独级别配置
确认WriteTo.Console()方法没有设置restrictedToMinimumLevel参数,如果单独给控制台Sink指定了Information及以上的级别,即使全局最低级别设为Trace,控制台也不会输出更低级别的日志。你当前贴的代码没有设置该参数,默认会继承全局最低级别,无需额外修改。
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

