2016-04-21 126 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> 

与一个你想要使用的更换格式。