2016-04-21 130 views
1

我正在嘗試使用存儲過程進行日誌記錄。我創建了一個存儲過程,這將在插入一行到表使用存儲過程log4net問題

CREATE PROCEDURE [dbo].[usp_insert_log] 
(
    @log_date datetime, 
    @log_level varchar(10), 
    @log_message nvarchar(max) 
) 
AS 
BEGIN 
    INSERT INTO [dbo].[Log] ([log_date], [log_level], [log_message]) 
    VALUES (@log_date, @log_level, @log_message) 
END 

在我的配置文件

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionStringName value="AnalyticsLogging" /> 
    <commandText value="usp_insert_log" /> 
    <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout"> 
      <conversionPattern value="%date" /> 
     </layout> 
    </parameter> 
</appender> 

我收到以下錯誤

log4net的:ERROR [AdoNetAppender] ErrorCode:GenericFailure。寫入數據庫時​​發生異常
System.Data.SqlClient.SqlException(0x80131904):過程或函數'usp_insert_log'需要未提供參數'@log_date'。

有什麼我失蹤?

回答

2

這在開始作爲一個評論彼得的答案(我同意這是正確的答案),但評論不斷增加,所以我決定在這裏添加補充答案。

文檔肯定是比較難找到解決這個問題,但除此之外,原佈局對象實現IRawLayout被引用here使用而不是在LoggingEvent格式化的一個,在這種情況下,原料DateTime原始,未格式化的對象。

如果你是想提供一個格式化DateTime,你可以使用:

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{HH:mm:ss,fff}" /> 
</layout> 

與一個你想要使用的更換格式。