【问题标题】:Turn off .NET Core EF LoggerFactory at runtime在运行时关闭 .NET Core EF LoggerFactory
【发布时间】:2020-07-02 22:37:55
【问题描述】:

我正在使用 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 分钟(不是开玩笑......),而在开发人员控制台中没有暂停。在此期间,整个应用程序没有响应。我想关闭大量查询的日志记录,但我不想完全关闭它。

【问题讨论】:

    标签: c# .net-core entity-framework-core ef-core-3.1 .net-core-logging


    【解决方案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);
                // ...
            }
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 2021-05-20
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多