2008-09-24 6 views
9

ADONetAppender를 사용하여 저장 프로 시저를 통해 데이터를 기록하려고합니다 (로깅 루틴에 논리를 삽입 할 수 있도록).log4net 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> 

답변

4

주의 깊은 DBA 덕분에 문제가 해결되었습니다.

"@Message"매개 변수의 크기에 유의하십시오. log4net은 형식을 변환하는 방법을 추측하고 있고 열이 varchar인데도 nvarchar로 변환하는 것으로 생각됩니다. 나는 4000과 모든 것에 크기를 변경 http://support.microsoft.com/kb/827366

: VARCHAR이 기술 자료 문서에 설명 된대로 DBA가 오류를보고 8000

의 최대 크기를 가지고있는 동안은 nvarchar 4000의 최대 크기를 가지고 있기 때문에 이것은 큰 문제입니다 swimingly 작동합니다.

다른 사람이 같은 문제를 피하는 데 도움이되기를 바랍니다.

건배! VARCHAR에 대한 DbType과 같은

-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> 
관련 문제