2017-07-31 52 views
0

我用n日志和以下设置登录SQL查询:记录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参数的值?

谢谢

+1

在你的'DbContextOptionsBuilder'调用'EnableSensitiveDataLogging'默认情况下EF核心不记录值,因为值可能包含敏感数据。 – Smit

+0

@Smit我认为这是一个答案,随时张贴一遍。谢谢 – myro

回答

1

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

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

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

optionsBuilder 
    .UseSqlServer("connectionstring") 
    .EnableSensitiveDataLogging();