我正在使用MySql来使用EF Core 2.1.1,并且我具有以下代码来启用对转换为SQL查询的ef核心的日志记录
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
}
我在日志中什么也看不到,也不知道为什么。
答案 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);
})