【问题标题】:How do I use a stored procedure in log4net ADONetAppender?如何在 log4net ADONetAppender 中使用存储过程?
【发布时间】:2010-09-12 20:54:08
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: logging log4net adonetappender


    【解决方案1】:

    使用“AnsiString”作为 varchar 的 dbType。 nvarchar 的“字符串”。

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

    【讨论】:

      【解决方案2】:

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

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

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

      我将大小更改为 4000,一切正常。

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

      干杯!

      【讨论】:

        【解决方案3】:

        </configSections>
        <log4net>
        
            <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
        
                <bufferSize value="1"/>
        
                <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        
                <connectionString value="Data Source=yourservername;initial Catalog=Databasename;User ID=sa;Password=xyz;"/>
        
        
        
                <commandText value="INSERT INTO Log4Net ([Date], [Thread], [Level], [Logger], [Message], 
                       [Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
        
                <parameter>
        
                    <parameterName value="@log_date"/>
        
                    <dbType value="DateTime"/>
        
                    <layout type="log4net.Layout.RawTimeStampLayout"/>
        
                </parameter>
        
                <parameter>
        
                    <parameterName value="@thread"/>
        
                    <dbType value="String"/>
        
                    <size value="255"/>
        
                    <layout type="log4net.Layout.PatternLayout">
        
                        <conversionPattern value="%thread ip=%property{ip}"/>
        
                    </layout>
        
                </parameter>
        
                <parameter>
        
                    <parameterName value="@log_level"/>
        
                    <dbType value="String"/>
        
                    <size value="50"/>
        
                    <layout type="log4net.Layout.PatternLayout">
        
                        <conversionPattern value="%level"/>
        
                    </layout>
        
                </parameter>
        
                <parameter>
        
                    <parameterName value="@logger"/>
        
                    <dbType value="String"/>
        
                    <size value="255"/>
        
                    <layout type="log4net.Layout.PatternLayout">
        
                        <conversionPattern value="%logger"/>
        
                    </layout>
        
                </parameter>
        
                <parameter>
        
                    <parameterName value="@message"/>
        
                    <dbType value="String"/>
        
                    <size value="4000"/>
        
                    <layout type="log4net.Layout.PatternLayout">
        
                        <conversionPattern value="%message"/>
        
                    </layout>
        

        【讨论】:

          猜你喜欢
          • 2012-04-29
          • 2014-07-01
          • 2016-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-11
          • 1970-01-01
          • 2012-07-19
          相关资源
          最近更新 更多