动态更改 dotnet Core 日志记录级别

Dynamically change dotnet Core logging level

许多使用 EF Core 表达的 1:m 查询被评估为关系第一侧的循环,子查询为每个父查询评估。

这会在调试控制台上产生大量 信息日志,淹没其他日志。

可以简单地完全关闭日志记录: 这大大加快了调试器中的查询评估,但如果您只是想排除查询评估以便找到其他日志,则这无济于事.

大概记录器是由某处的构建器创建的,并由依赖注入容器管理。有谁知道如何获取对它的引用并欺骗日志记录级别?

虽然 Ivan 的建议会带来有用的文档,但我改变了我对如何最好地解决更大问题的想法。

运行 对每个 parent 行的 children 进行单独查询是一种以更高的开销为代价来缓解峰值工作集的策略。这对于负载很重的 SQL 服务器来说很好,但对网络或客户端来说不太好。从客户端的角度来看,吞吐量是惨淡的。

如果 您需要整个结果,请将 parent 行具体化为一个数组,然后使用 LINQ 获取不同的键值数组。然后查询child端,利用从array.Contains到IN()到运行的单次查询使用索引。将其具体化为本地数组,然后使用 LINQ 将 parents 与内存中的 children 连接起来并投影结果。

此方法产生 运行 两个 SQL 查询,因此日志污染停止。它的 set-up 和 tear-down 开销要低得多,但瞬态内存需求更高。传送的数据总量大致相同,除了必须在 parents 和 children 中传送的连接密钥。

在我处理的案例中,这种策略的改变在禁用日志记录的情况下将执行时间从三十秒减少到半秒,在启用日志记录的情况下从十分钟减少到半秒 - 这需要一段时间将相同的 long 查询写入控制台 600 次。

产生上述数字的数据包含 600 parents 和 2800 children。