我正在使用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);
// ...
}
}
}
现在,我不再需要等待我的应用程序用数百万查询日志填充(单线程(控制台调试输出。