EF Core EnableSensitiveDataLogging无法正常工作

时间:2019-04-04 10:21:57

标签: c# .net asp.net-core .net-core entity-framework-core

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

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
      optionsBuilder.EnableSensitiveDataLogging();
}

我在日志中什么也看不到,也不知道为什么。

2 个答案:

答案 0 :(得分:1)

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

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

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

配置启动后,现在您将看到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;

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

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

注意!!确保在部署到生产环境时禁用敏感数据记录。

答案 1 :(得分:0)

构建选项时,必须使用应用程序的LoggerFactory。

别忘了安装Microsoft.Extensions.Logging.Console(Nuget软件包)

new ServiceCollection()
.AddTransient(provider => {
                var options = new DbContextOptionsBuilder<MyDbContext>()
                .EnableSensitiveDataLogging(true)
                .UseLoggerFactory((ILoggerFactory)provider.GetService(typeof(ILoggerFactory)))
                .UseMySql(config.GetConnectionString("DefaultConnection"))
                    .Options;
                return new MyDbContext(options);
            })