ABP框架 將EntityFrameworkCore生成的SQL語句輸出到控制台


首先

在 EntityFrameworkCore中安裝 Microsoft.Extensions.Logging.Console

nuget install Microsoft.Extensions.Logging.Console
按照官方文檔 使用UseLoggerFactory 方法 (地址:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/logging)

安裝相應的程序包之后, 該應用程序應創建 LoggerFactory 的單一實例/全局實例。 例如,使用控制台記錄器:

 

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});

然后,應該在 DbContextOptionsBuilder 上向 EF Core 注冊此單一實例/全局實例。 例如:

 

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
        .UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

 

篩選SQL內容

篩選所記錄內容的最簡單方法是在注冊 ILoggerProvider 時對其進行配置。 例如:

 

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[]
    {
        new ConsoleLoggerProvider((category, level)
            => category == DbLoggerCategory.Database.Command.Name
               && level == LogLevel.Information, true)
    });

 

文檔提醒:

下面的代碼示例使用ConsoleLoggerProvider已過時版本 2.2 中的構造函數。 適當替換已過時的日志記錄 Api 將在版本 3.0 中提供。 在此期間,則可以安全地忽略,並禁止顯示警告。

錯誤可以忽略,.net core 3.0 api會發生改變,這種方法只能在2.0使用!

在此示例中,篩選日志以僅返回以下位置的消息:
在 Microsoft.EntityFrameworkCore.Database.Command 類別中
在信息級別
對於 EF Core 記錄器類別在中定義DbLoggerCategory類,以便可以方便地查找類別,但這些解析為簡單的字符串。

 

 
        using Microsoft.Extensions.Logging;
        using Microsoft.Extensions.Logging.Console;

        public static readonly LoggerFactory MyLoggerFactory
            = new LoggerFactory(new[]
            {
                new ConsoleLoggerProvider((category, level)
                    => category == DbLoggerCategory.Database.Command.Name
                && level == LogLevel.Information, true)
            });

        public override void PreInitialize()
        {
            if (!SkipDbContextRegistration)
            {
                Configuration.Modules.AbpEfCore().AddDbContext(options =>
                {
                    if (options.ExistingConnection != null)
                    {
                        AbpVueDbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection);
                    }
                    else
                    {
                        AbpVueDbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString);
                    }
                    options.DbContextOptions.UseLoggerFactory(MyLoggerFactory);
                    options.DbContextOptions.EnableSensitiveDataLogging(true);       //logging 不加密 development使用 !
                });
            }
        }

效果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM