Отключить .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);
// ...
}
}
}
Теперь мне больше не нужно ждать, пока мое приложение заполнит вывод отладки (однопоточной) консоли миллионами журналов запросов.