如何禁用EF Core的QuerySplittingBehavior.SingleQuery日志警告
方案1:直接在EF Core配置层面禁用该警告(最推荐,仅屏蔽指定单条警告,不影响其他正常警告输出)
你只需要在注册DbContext的代码中添加警告忽略配置即可:
builder.Services.AddDbContext<你的DbContext类名>(options => options.UseSqlServer("你的数据库连接字符串") // 新增这一行忽略指定警告 .ConfigureWarnings(warnings => warnings.Ignore(RelationalEventId.MultipleCollectionIncludeWarning)) );
注意需要提前引入命名空间 Microsoft.EntityFrameworkCore.Diagnostics。
方案2:通过appsettings.json日志配置批量屏蔽EF Query分类的所有警告
如果不想修改EF配置,也可以单独抬高EF Query命名空间的日志输出级别,让该分类下的Warning日志不会被写入:
修改你现有的Logging配置如下:
"Logging": { "LogLevel": { "Default": "Trace", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information", "Microsoft.EntityFrameworkCore": "Warning", // 新增这一行,仅EF Query分类下Error及以上级别日志才会输出 "Microsoft.EntityFrameworkCore.Query": "Error", "IdentityServer4": "Information" } }
该方案的缺点是会屏蔽EF Query分类下所有的Warning日志,如果你还需要接收该分类下的其他警告不建议用。
方案3:在NLog配置中按内容精准过滤单条警告
如果你只想在日志输出环节过滤这条警告,不修改EF和全局日志配置,可以直接在NLog的规则里添加内容匹配过滤:
找到你的NLog配置文件(一般为nlog.config),在对应日志规则中添加过滤规则:
<logger name="Microsoft.EntityFrameworkCore.Query" minlevel="Warn" writeTo="你配置的日志输出目标名"> <filters> <!-- 匹配到对应警告内容就直接丢弃 --> <when condition="contains('${message}', 'Compiling a query which loads related collections for more than one collection navigation')" action="Ignore" /> </filters> </logger>
内容的提问来源于stack exchange,提问作者Boppity Bop
相关产品推荐
相关产品推荐

