9

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

3 に答える 3

5

varchar の dbType として「AnsiString」を使用します。nvarchar の「文字列」。

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

于 2010-09-24T13:21:56.533 に答える
4

警戒心の強いDBAのおかげで、問題は解決しました。

「@Message」パラメータのサイズに注意してください。log4netは、列がvarcharであっても、型を変換する方法と(私が思うに)それをnvarcharに変換する方法を推測しています。nvarcharの最大サイズは4000であるのに対し、varcharの最大サイズは8000であるため、これは大きな問題です。

DBAは、次のKB記事で説明されているエラーを確認しました:http ://support.microsoft.com/kb/827366

サイズを4000に変更すると、すべてが水泳で動作します。

うまくいけば、これは他の誰かが同じ問題を回避するのに役立つでしょう。

乾杯!

于 2008-09-24T21:13:02.723 に答える
-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>
于 2009-06-24T10:34:58.787 に答える