Отключить .NET Core EF LoggerFactory во время выполнения

Я использую LoggerFactory для регистрации моего DataContext EF Core (3.1.2):

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 минут (без шуток...) без пауз в консоли разработчика. В течение этого периода все приложение не отвечает. Я бы хотел отключить ведение журнала для этого огромного пакета запросов, но не хочу отключать его полностью.

1 ответ

Решение

Товарищ по работе нашел отличное решение, которое очень хорошо подходит для моего сценария. Поскольку я не использую никаких инъекций зависимостей для упрощения выполнения параллельных запросов, я могу отключить ведение журнала для определенных экземпляров 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);
            // ...
        }
    }
}

Теперь мне больше не нужно ждать, пока мое приложение заполнит вывод отладки (однопоточной) консоли миллионами журналов запросов.

Другие вопросы по тегам