【发布时间】:2020-08-10 19:57:17
【问题描述】:
我正在开发一个使用 .NET Core 3.1 和 Entity Framework Core 3.1 的应用程序。我有一个 MSTest 单元测试项目,用于测试基于 EF Core 构建的数据访问层。数据库为 SQL Server 2019 Express Edition。
appsettings.json
{ "EnableSensitiveDataLogging": "假", “记录”:{ “日志级别”:{ “默认”:“信息”, “系统”:“调试”, “微软”:“调试”, “Microsoft.EntityFrameworkCore”:“调试” } } }创建 DbContextOptionsBuilder
配置 = 新的 ConfigurationBuilder() .AddJsonFile("appsettings.json", false) .AddJsonFile("secrets.json", true) 。建造(); var loggerFactory = LoggerFactory.Create(配置 => { 配置.AddConsole(); }); bool.TryParse(Configuration["EnableSensitiveDataLogging"] ?? "false", out bool enableSensitiveDataLogging); 生成器 = 新的 DbContextOptionsBuilder() .UseLoggerFactory(loggerFactory) .EnableSensitiveDataLogging(enableSensitiveDataLogging);当我运行验证在数据库中创建新实体的测试时,测试输出仅显示与 EF Core 执行的命令相关的信息。没有关于隐式交易的详细信息。以下是输出日志:
信息:Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 3.1.3 使用提供者“Microsoft.EntityFrameworkCore.SqlServer”初始化“CustomerDbContext”,选项:无 信息: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'] 设置无计数; 插入 [customer].[addresses]([country_id]、[line_1]、[line_2]、[line_3]、[zip_postalcode]、[county_province]、[creation_date]、[last_modified_date]) 值(@p0、@p1、@p2、@p3、@p4、@p5、@p6、@p7); 选择 [address_id] FROM [客户].[地址] 其中@@ROWCOUNT = 1 AND [address_id] = scope_identity(); ...我修改了 LoggerFactory 以明确指定过滤器,如下所示:
var loggerFactory = LoggerFactory.Create(配置 => { 配置.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] 以“未指定”隔离级别开始事务。 dbug:Microsoft.EntityFrameworkCore.Database.Transaction[20200] 以隔离级别“ReadCommitted”开始事务。 dbug:Microsoft.EntityFrameworkCore.Database.Transaction[20210] 提交事务。 dbug:Microsoft.EntityFrameworkCore.Database.Transaction[20202] 提交事务。 dbug:Microsoft.EntityFrameworkCore.Database.Transaction[20204] 处置交易。问题 - 如何配置记录器工厂以同时显示事务和命令信息?
【问题讨论】:
标签: c# logging entity-framework-core