在运行时关闭 .NET Core EF LoggerFactory

Turn off .NET Core EF LoggerFactory at runtime

我正在使用 LoggerFactory 记录我的 EF Core (3.1.2) DataContext:

public static readonly ILoggerFactory LoggerFactory = Microsoft.Extensions.Logging.LoggerFactory.Create(builder => { builder.AddConsole().AddDebug(); });

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (optionsBuilder.IsConfigured == false)
    {
        optionsBuilder.UseLoggerFactory(LoggerFactory);
        // ...
    }
}

我需要如何修改我的代码以停用或修改运行时日志记录的 LogLevel?这可能吗?

编辑

我要这样做的真正原因很奇怪。我的大量 EF Core 查询都已完成(使用数据库进行双重检查),但昂贵的查询日志仍然会在开发人员控制台中持续显示 10 分钟(不是开玩笑......)而没有暂停。在这段时间内,整个应用程序没有响应。我想关闭这一大批量查询的日志记录,但我不想完全关闭它。

一位同事想出了一个非常适合我的情况的简洁解决方案。由于我不使用任何依赖项注入来简化 运行 并行查询的能力,因此我可以使用可选的构造函数参数关闭特定 DataContext 实例的日志记录:

public MyDataContext(bool enableLog = true)
{
    this.enableLog = enableLog;
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (optionsBuilder.IsConfigured == false)
    {
        if (this.enableLog == true)
        {
            optionsBuilder.UseLoggerFactory(LoggerFactory);
            // ...
        }
    }
}

现在,我不必再等待我的应用程序用数百万个查询日志填充(单线程)控制台调试输出。