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使用 !
                });
            }
        }

效果如图:

 

posted @ 2019-02-26 20:52  Pursue`  阅读(4429)  评论(0编辑  收藏  举报