繁体   English   中英

在运行时关闭 .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);
            // ...
        }
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM