【问题标题】:EF Core EnableSensitiveDataLogging does not work as expectedEF Core EnableSensitiveDataLogging 无法按预期工作
【发布时间】:2019-08-26 01:37:01
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过在配置服务中调用它吗?像这样:services.AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")).EnableSensitiveDataLogging())
  • 是的,我也试过了

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


【解决方案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 的输出窗口(调试...Windows...输出)中,如下所示,

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。

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

【讨论】:

  • 谢谢谢谢谢谢!我一直在寻找这个“正确”“有效”的答案。我所做的所有其他配置都可能有效,但我得到的错误是它在每次请求时都实例化登录对象。对于 API,这将是很多事情!
  • RE:确保在部署到生产环境时禁用敏感数据日志记录。您可以有条件地启用它,例如:if (env.IsDevelopment()) { options.EnableSensitiveDataLogging(); } 用于 Web (ASP.NET) 应用程序,然后envIWebHostEnvironment。或者,例如使用 Azure Functions:if (builder.GetContext().EnvironmentName == "Development") { options.EnableSensitiveDataLogging(); } 假设您使用 Startup.cs 并通过依赖注入在 Configure 方法中获取 IFunctionsHostBuilder。
【解决方案2】:

您必须在构建选项时使用应用程序的 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);
            })

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多