記錄sql查詢參數值

.net entity-framework-core nlog

我使用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();


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow