Nlog配置问题:EF Core日志级别未按预期生效求助
问题
我在appsettings.json中配置了Nlog规则,同时在DbContext的OnConfiguring方法中集成了Nlog。期望实现:
- 所有Info级别及以上日志输出到控制台
- Microsoft.EntityFrameworkCore.*仅输出Error和Fatal级别
但目前Microsoft.EntityFrameworkCore.*的Info级日志仍被输出,请问哪里配置错误?
配置代码
appsettings.json中的Nlog规则:
"rules": [ { "logger": "Microsoft.EntityFrameworkCore.*", "minLevel": "Error", "writeTo": "console" }, { "logger": "*", "minLevel": "Info", "writeTo": "console" } ]
DbContext配置代码:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var loggerFactory = LoggerFactory.Create(builder => builder.AddNLog()); optionsBuilder.UseLoggerFactory(loggerFactory); }
问题分析与解决
你的NLog规则逻辑存在问题:NLog的规则是按顺序匹配,且默认会继续执行后续规则。也就是说,Microsoft.EntityFrameworkCore.*的日志先匹配第一条规则输出Error及以上级别,但同时会进入第二条*规则,触发Info及以上级别的输出,导致Info日志被重复打印。
解决方法是给第一条规则添加final: true属性,标记该规则匹配后不再执行后续规则,阻止Microsoft.EntityFrameworkCore.*的日志进入第二条规则。
修改后的NLog规则:
"rules": [ { "logger": "Microsoft.EntityFrameworkCore.*", "minLevel": "Error", "writeTo": "console", "final": true }, { "logger": "*", "minLevel": "Info", "writeTo": "console" } ]
同时请确认:
- 你的NLog版本支持
final配置项 - appsettings.json中的NLog配置已被正确加载(比如通过对应配置加载方式完成初始化)
内容的提问来源于stack exchange,提问作者Piotr
相关产品推荐
相关产品推荐

