2011-03-06 73 views
8

在C#Web應用程序中使用NLog時,我使用存儲過程而不是SQL INSERT語句存在一些問題。連接字符串「Logger」在Web.config中正確配置,並且在用SQL語句替換commandText時正常工作。我希望向正確的方向提示。在這個例子中,存儲過程在「日誌」模式下,它被稱爲「LogError」。在數據庫目標上的NLog中使用存儲過程

<targets> 
    <target xsi:type="Database" 
     name="dberrorlog" 
     connectionStringName="Logger" 
     keepConnection="true" 
     commandText="[Logs].[LogError]" > 
     <parameter name="@ProgName" layout="MyAppName"/> 
     <parameter name="@CompName" layout="${machinename}"/> 
     <parameter name="@LogLevel" layout="${level}"/> 
     <parameter name="@UserName" layout="${identity}"/> 
     <parameter name="@Error" layout="${exception:format=Message}"/> 
     <parameter name="@SourceObj" layout="${exception:format=Method}"/> 
     <parameter name="@StackTrace" layout="${exception:format=StackTrace}"/> 
</target> 
</targets> 
<rules> 
    <logger name="*" minlevel="Error" writeTo="dberrorlog" /> 
</rules> 

回答

10

從這個NLOG forum post,請嘗試使用文本來執行存儲過程:

commandtext="exec AddActivityLog 
          @ApplicationName, 
          @ApplicationTime, 
          @Severity, 
          @Logger, 
          @SaxoID, 
          @EventID, 
          @Message, 
          @URL, 
          @URLReferrer, 
          @RemoteAddress, 
          @Callsite, 
          @CurrentUICulture, 
          @ThreadIdentity, 
          @WindowsIdentity, 
          @MachineName, 
          @ProcessID, 
          @ThreadID, 
          @ThreadName, 
          @Stacktrace, 
          @Exception, 
          @Cookie, 
          @FormVariables, 
          @QueryString, 
          @HTTPUserAgent" 

旁註:克勞斯Rathje的答案不會在瀏覽器中呈現,所以我不得不尋找一個在頁面源查看他發佈的配置。

+0

謝謝,這個伎倆。我沒有想到我可以致電exec。它在內部調用sp_executesql – Diego 2011-03-08 20:49:01

+0

@adrift到NLog論壇帖子的鏈接現在是多餘的。 – chridam 2014-03-21 15:51:22

1

請注意,儘管@ JeffOgata的解決方案有效,但可能不是您想解決問題的方式。

你可以做這樣的事情,而不是:

commandText="AddActivityLog" 
commandType="StoredProcedure" 

這樣,你不必有關正確格式化擔心的EXEC查詢。

+0

需要傳遞的參數呢? – JoshYates1980 2016-02-19 17:17:11

相關問題