Ich verwende EF Core 2.1.1 mit MySQL und habe den folgenden Code, um die Protokollierung des in SQL-Abfragen übersetzten EF Core zu ermöglichen
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging();
}
Ich sehe jedoch nichts in den Protokollen und weiß nicht warum.
Unter Verwendung von EF Core 2.2 mit Visual Studio 2019 und SQL Server konnte ich die EnableSensitiveDataLogging- Option mit der folgenden Konfiguration zum Laufen bringen .
In Ihrer Klasse Startup.cs
Fügen Sie den Protokollierungsdienst Ihrer ConfigureServices-Methode hinzu. Ich filtere die Protokollierung nach Datenbankbefehlen und Information Logging Level.
services.AddLogging(loggingBuilder => {
loggingBuilder.AddConsole()
.AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Information);
loggingBuilder.AddDebug();
});
Aktualisieren Sie jetzt Ihren DBContext, um die Protokollierung vertraulicher Daten zu aktivieren.
services.AddDbContext<MyDbContext>(options => {
options.UseSqlServer(_configuration.GetConnectionString("MyDbConnection"));
options.EnableSensitiveDataLogging(true);
});
Nachdem Sie Ihren Start konfiguriert haben, sehen Sie nun die SQL-Befehle und ihre vertraulichen Daten in unserem Ausgabefenster in Visual Studio (Debug ... Windows ... Ausgabe), wie unten gezeigt.
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;
Ich brauchte eine Weile, um das herauszufinden. Ich konnte die vertraulichen Daten auch nicht mithilfe der OnConfiguring-Methode in der DBContext-Klasse im Protokoll anzeigen.
Hoffe, dies hilft, obwohl es SQL Server und nicht MySQL verwendet.
HINWEIS! Deaktivieren Sie unbedingt die Protokollierung vertraulicher Daten, wenn Sie sie für die Produktion bereitstellen.