记录SQL查询参数值

myr*_*yro 0 .net nlog entity-framework-core

我使用nlog和以下设置来记录sql查询:

<logger name="Microsoft.EntityFrameworkCore.*" 
        minlevel="Trace" writeTo="sqllogfile" final="true" />
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但不记录参数值,查询如下所示:

2017-07-31 13:49:03.8836|  INFO  |Microsoft.EntityFrameworkCore.Internal.InterceptingLogger`1.Log|Executed DbCommand (8ms) [Parameters=[@__get_Item_0='?' (Size = 450)], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [e].[Id], [e].[AccessFailedCount], [e].[ConcurrencyStamp], [e].[Email], [e].[EmailConfirmed], [e].[HeliosLoginId], [e].[LockoutEnabled], [e].[LockoutEnd], [e].[Name], [e].[NormalizedEmail], [e].[NormalizedUserName], [e].[PasswordHash], [e].[PhoneNumber], [e].[PhoneNumberConfirmed], [e].[SecurityStamp], [e].[TwoFactorEnabled], [e].[UserName]
FROM [AspNetUsers] AS [e]
WHERE [e].[Id] = @__get_Item_0 
Run Code Online (Sandbox Code Playgroud)

是否可以显示@__get_Item_0参数值?

谢谢

Smi*_*mit 5

默认情况下,EF Core会在要记录的SQL中隐藏数据。查询可以具有各种数据,其中一些可以是敏感信息(例如客户的社会保险号或信用卡信息)。因此,日志具有?实际值,而不是实际值。

尽管有时开发人员可能希望查看这些值,尤其是在调试令人讨厌的错误时。要启用记录实际值,需要配置dbcontext。

你需要调用EnableSensitiveDataLogging()你的DbContextOptionsBuilder。由于配置数据库上下文选项的方法有多种,因此最简单的方法就是在您的提供程序配置连接字符串的位置(例如UseSqlServer),您可以在其后链接它。

例

optionsBuilder
    .UseSqlServer("connectionstring")
    .EnableSensitiveDataLogging();
Run Code Online (Sandbox Code Playgroud)