Выключите. NET Core EF LoggerFactory во время выполнения - PullRequest
0 голосов
/ 22 марта 2020

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

1 Ответ

0 голосов
/ 23 марта 2020

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

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

...