ABP框架 将EntityFrameworkCore生成的SQL语句输出到控制台

本文介绍了如何在ABP框架下,利用EntityFrameworkCore的UseLoggerFactory方法将数据库操作的SQL语句输出到控制台。通过安装相关程序包,设置DbContextOptionsBuilder,并过滤日志内容,只保留Microsoft.EntityFrameworkCore.Database.Command类别的信息级别日志,以实现SQL语句的查看和调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先

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

效果如图:

 

转载于:https://www.cnblogs.com/WNpursue/p/ABP-USE-UseLoggerFactory-ILoggerFactory.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值