记录 sql 查询参数值
Logging sql query parameter values
我使用 nlog 和以下设置来记录 sql 查询:
<logger name="Microsoft.EntityFrameworkCore.*"
minlevel="Trace" writeTo="sqllogfile" final="true" />
它按预期工作,但不记录参数值,查询如下所示:
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
是否可以显示 @__get_Item_0
参数的值?
谢谢
默认情况下,EF Core 将记录的数据隐藏在 SQL 中。查询可以包含各种数据,其中一些可能是敏感信息(如客户的社会安全号码或信用卡信息)。因此日志具有 ?
而不是实际值。
尽管有时开发人员可能希望查看这些值,尤其是在调试讨厌的错误时。要启用记录实际值,您需要配置 dbcontext。
您需要在 DbContextOptionsBuilder
上拨打 EnableSensitiveDataLogging()
。由于有多种方法可以配置数据库上下文选项,最简单的方法就是在配置连接字符串(例如 UseSqlServer
)的提供程序的地方,您可以在它后面链接它。
示例
optionsBuilder
.UseSqlServer("connectionstring")
.EnableSensitiveDataLogging();
我使用 nlog 和以下设置来记录 sql 查询:
<logger name="Microsoft.EntityFrameworkCore.*"
minlevel="Trace" writeTo="sqllogfile" final="true" />
它按预期工作,但不记录参数值,查询如下所示:
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
是否可以显示 @__get_Item_0
参数的值?
谢谢
默认情况下,EF Core 将记录的数据隐藏在 SQL 中。查询可以包含各种数据,其中一些可能是敏感信息(如客户的社会安全号码或信用卡信息)。因此日志具有 ?
而不是实际值。
尽管有时开发人员可能希望查看这些值,尤其是在调试讨厌的错误时。要启用记录实际值,您需要配置 dbcontext。
您需要在 DbContextOptionsBuilder
上拨打 EnableSensitiveDataLogging()
。由于有多种方法可以配置数据库上下文选项,最简单的方法就是在配置连接字符串(例如 UseSqlServer
)的提供程序的地方,您可以在它后面链接它。
示例
optionsBuilder
.UseSqlServer("connectionstring")
.EnableSensitiveDataLogging();