EF Core EnableSensitiveDataLogging 无法按预期工作

pan*_*nis 7 .net c# entity-framework-core .net-core asp.net-core

我正在使用 MySql 的 EF Core 2.1.1 并且我有以下代码来启用转换为 SQL 查询的 ef 核心的日志记录

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
      optionsBuilder.EnableSensitiveDataLogging();
}
Run Code Online (Sandbox Code Playgroud)

虽然我在日志中没有看到任何内容,但我不知道为什么。

小智 20

将 EF Core 2.2 与 Visual Studio 2019 和 SQL Server 一起使用,我能够使用以下配置使EnableSensitiveDataLogging选项工作。

在您的 Startup.cs 类中,

将日志服务添加到您的 ConfigureServices 方法。我正在将日志记录过滤到数据库命令和信息记录级别,

services.AddLogging(loggingBuilder => {
    loggingBuilder.AddConsole()
        .AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Information);
    loggingBuilder.AddDebug();
});

Run Code Online (Sandbox Code Playgroud)

现在更新您的 DBContext 以启用敏感数据日志记录,

services.AddDbContext<MyDbContext>(options => {
    options.UseSqlServer(_configuration.GetConnectionString("MyDbConnection"));
    options.EnableSensitiveDataLogging(true);
});

Run Code Online (Sandbox Code Playgroud)

配置启动后,您现在将看到 SQL 命令及其敏感数据出现在 Visual Studio (Debug...Windows...Output) 的输出窗口中,如下所示,

Microsoft.EntityFrameworkCore.Database.Command:Information: Executed DbCommand (3ms) 
    [Parameters=[@p1='aaa' (Nullable = false) (Size = 450), 
                 @p2='bbb' (Size = 4000), 
                 @p0='New Column Value' (Size = 4000)], 
    CommandType='Text', CommandTimeout='30']

SET NOCOUNT ON;
UPDATE [MyTableName] SET [MyColumnName] = @p0
WHERE [Id] = @p1 AND [OtherColumn] = @p2;
SELECT @@ROWCOUNT;

Run Code Online (Sandbox Code Playgroud)

我也花了一段时间才弄清楚这一点。我也无法使用 DBContext 类中的 OnConfiguring 使敏感数据出现在日志中。

希望这会有所帮助,即使它使用的是 SQL Server 而不是 MySQL。

笔记! 确保在部署到生产时禁用敏感数据日志记录。

  • 在 .NET 6 中,您需要:`options.EnableSensitiveDataLogging(builder.Environment.IsDevelopment());` (4认同)