2008-09-24 11 views
9

Ich benutze den ADONetAppender um (versuchen) Daten über eine gespeicherte Prozedur zu protokollieren (so dass ich Logik in die Protokollierungsroutine injizieren kann).Wie verwende ich eine gespeicherte Prozedur in log4net ADONetAppender?

Meine Konfigurationseinstellungen sind unten aufgeführt. Kann jemand sagen, was ich falsch mache?

<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> 

Antwort

4

Dank eines aufmerksamen DBA haben wir das Problem gelöst.

Beachten Sie die Größe des Parameters "@Message". log4net nimmt an, wie man den Typ konvertiert und (ich denke) ihn in nvarchar konvertiert, obwohl die Spalte ein varchar ist. Dies ist eine große Sache, weil nvarchar eine maximale Größe von 4000 hat, während varchar eine maximale Größe von 8000.

Die DBA Fehler gesehen hat, wie in diesem KB-Artikel beschrieben: http://support.microsoft.com/kb/827366

ich die Größe auf 4000 geändert und alles arbeitet schwimmend.

Hoffentlich hilft das jemand anderem, das gleiche Problem zu vermeiden.

Prost!

-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> 
Verwandte Themen