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

时间:2018-03-26 04:43:48

标签: logging asp.net-core-2.0 ef-core-2.0

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

这会在调试控制台上生成 lot 的信息日志,淹没其他日志。

一个人可以完全关闭注销:Disable .NET Core EF 2.0 Query Logging这大大加快了调试器中的查询评估速度,但如果您只想排除查询评估以便找到其他日志,它就无济于事

据推测,记录器由某个构建器创建,并由依赖注入容器管理。有谁知道如何获取它的参考并干掉日志记录级别?

1 个答案:

答案 0 :(得分:0)

虽然Ivan的建议可以提供有用的文档,但我已经改变了我的想法,如何最好地解决更大的问题。

为每个父行的子节点运行单独的查询是一种策略,可以以更高的开销为代价来减轻峰值工作集。这对于负载很重的SQL服务器很有用,对网络或客户端来说也不是那么好。就客户端的吞吐量而言,这是令人沮丧的。

如果需要整个结果,请将父行实现为数组,并使用LINQ获取不同的键值数组。然后查询子端,利用array.Contains转换为IN()以使用索引运行单个查询。将其作为本地数组进行混淆,然后使用LINQ将父节点与子节点内存连接起来并投影结果。

此方法会生成两个SQL查询,因此日志污染会停止。它具有低得多的设置和拆卸开销,但具有更高的瞬态内存需求。发送的数据总量大致相同,但必须在父母和子女中加载的加入密钥除外。

在我处理的情况下,这种策略的改变使执行时间从30秒减少到半秒,禁用了日志记录,并且从启用了日志记录的10分钟到半秒 - 需要一段时间才能写入相同的查询到控制台600次。

产生上述数据的数据包含600名父母和2800名儿童。