实体框架核心3.1 – 关于命令和事务的日志信息。

我正在开发一个使用.NET Core 3.1和Entity Framework Core 3.1的应用程序。我有一个MSTest单元测试项目,测试建立在EF Core上的数据访问层。数据库是SQL Server 2019 Express版。

appsettings.json

    { "EnableSensitiveDataLogging": "False", "Logging": { "LogLevel": "默认", "信息", "系统": { "系统 "信息", "系统": "Debug", "Microsoft": "Debug", "Microsoft.EntityFrameworkCore": "Debug" }       }    }

创建DbContextOptionsBuilder。

       Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false) .AddJsonFile("secrets.json", true) .Build(); var loggerFactory = LoggerFactory.Create(configure => { configure.AddConsole(); }); bool.TryParse(Configuration["EnableSensitiveDataLogging"] ? "false", out bool enableSensitiveDataLogging); Builder = new DbContextOptionsBuilder() .UseLoggerFactory(loggerFactory) .EnableSensitiveDataLogging(enableSensitiveDataLogging)。

当我运行验证在数据库中创建新实体的测试时,测试输出只向我显示了与EF Core执行的命令相关的信息。没有关于隐含事务的详细信息。下面是输出日志。

    info: Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.1.3 initialized 'CustomerDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: 无信息。Microsoft.EntityFrameworkCore.Database.Command[20101]执行DbCommand(42ms) [Parameters=[@p0='?' (DbType = Int32), @p1='? '(大小=100),@p2='?'(大小=100),@p3='?'(大小=100),@p4='?'(大小=30),@p5='?'(大小=100),@p6='?'(DbType=DateTimeOffset),@p7='? '(DbType = DateTimeOffset)],CommandType='Text',CommandTimeout='30'] SET NOCOUNT ON; INSERT INTO [customer].[address]([country_id], [line_1], [line_2], [line_3], [zip_postalcode], [county_province], [create_date], [last_modified_date])          VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7); SELECT [address_id] FROM [customer].[address] WHERE @@ROWCOUNT = 1 AND [address_id] = scope_identity(); ...

我修改了LoggerFactory,显式地指定了过滤器,如下所示。

    var loggerFactory = LoggerFactory.Create(configure => { configure.AddConsole() .AddFilter((category, level) => category == DbLoggerCategory.Database.Command.Name && level == LogLevel.Debug) .AddFilter((category, level) => category == DbLoggerCategory.Database.Transaction.Name && level == LogLevel.Debug); })。

这一次,当我运行同样的单元测试时,我可以在输出日志中看到事务信息,但没有发出命令的信息。

    dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20209] Beginning transaction with isolation level 'Unspecified'.dbug: dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20200] 以隔离级别 "ReadCommitted "开始事务。dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20210] 提交事务。dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20202] 提交事务。 dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20202] 提交事务。dbug: Microsoft.EntityFrameworkCore.Database.Transaction[20204] 处置事务。

问题 – 我如何配置记录器工厂以显示事务和命令信息?

解决方案:

你所建立的配置对返回的记录器工厂没有影响。LoggerFactpry.Create 调用 添加迁移,例如

configure.AddConfiguration(Configuration.GetSection("Logging"));

配置记录器工厂显式显示事务日志(不需要配置文件)是这样的。

configure.AddFilter(DbLoggerCategory.Database.Transaction.Name, LogLevel.Debug);

同样的连接是这样的

configure.AddFilter(DbLoggerCategory.Database.Connection.Name, LogLevel.Information);

但通常不需要,因为 Information 是默认的最小级别(这就是为什么你在原始代码中看到它的原因)。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在Ionic中从WordPress JSON API中检索数据。

2022-9-9 17:58:22

未分类

cnn的最佳输入形状是什么?[关闭]

2022-9-9 18:11:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索