如何在log4net ADONetAppender中使用存储过程?

9 logging log4net adonetappender

我正在使用ADONetAppender(尝试)通过存储过程记录数据(这样我可以将逻辑注入日志记录例程).

我的配置设置如下所示.谁能说出我做错了什么?

<appender name="ADONetAppender_SqlServer" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1" />
  <threshold value="ALL"/>
  <param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <param name="ConnectionString" value="<MyConnectionString>" />
  <param name="UseTransactions" value="False" />
  <commandText value="dbo.LogDetail_via_Log4Net" />
  <commandType value="StoredProcedure" />
      <parameter>
         <parameterName value="@AppLogID"/>
         <dbType value="String"/>
         <size value="50" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{LoggingSessionId}" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@CreateUser"/>
         <dbType value="String"/>
         <size value="50" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%property{HttpUser}" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@Message"/>
         <dbType value="String"/>
         <size value="8000" />
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
         </layout>
      </parameter>
      <parameter>
         <parameterName value="@LogLevel"/>
         <dbType value="String"/>
         <size value="50"/>
         <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
         </layout>
      </parameter>
</appender>
Run Code Online (Sandbox Code Playgroud)

Bob*_*nks 5

使用"AnsiString"作为varchar的dbType.nvarchar的"字符串".

http://msdn.microsoft.com/en-us/library/system.data.dbtype%28v=VS.90%29.aspx


小智 4

感谢一位警惕的 DBA,我们解决了这个问题。

请注意“@Message”参数的大小。log4net 正在猜测如何转换类型并(我认为)将其转换为 nvarchar,即使该列是 varchar。这是一个大问题,因为 nvarchar 的最大大小为 4000,而 varchar 的最大大小为 8000。

DBA 发现了此知识库文章中所述的错误:http://support.microsoft.com/kb/827366

我将大小更改为 4000,一切顺利。

希望这会帮助其他人避免同样的问题。

干杯!