0

ほとんどの人がログに記録する基本的なログ情報を挿入する、log4net 用の ADO.NET アペンダーがあります。ログがエラー以上かどうかを示すビット/フラグである「IsCritical」の列を追加したいと思います。カスタム列の挿入について読んだことがありますが、この場合は、ログに既に存在するデータの書式設定にすぎません。これが私の現在の ADONetAppende です。また、ログ レベル文字列を表すログ レベル値 (数値) を含む列も必要です。

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1"/>
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=xxx"/>
  <connectionString value="Data Source=localhost\SQLEXPRESS;Initial Catalog=mydb;Integrated Security=True"/>
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES&#xD;&#xA;       (@log_date, @thread, @log_level, @logger, @message, @exception)"
                                                                   />
  <parameter>
    <parameterName value="@log_date"/>
    <dbType value="DateTime"/>
    <layout type="log4net.Layout.RawUtcTimeStampLayout"/>
  </parameter>
  <parameter>
    <parameterName value="@thread"/>
    <dbType value="String"/>
    <size value="32"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%t"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level"/>
    <dbType value="String"/>
    <size value="512"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%p"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@logger"/>
    <dbType value="String"/>
    <size value="512"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%c"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@message"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%m"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@exception"/>
    <dbType value="String"/>
    <size value="2000"/>
    <layout type="log4net.Layout.ExceptionLayout"/>
  </parameter>
  <parameter>
    <parameterName value="@exception"/>
    <dbType value="String"/>
    <size value="2000"/>
    <layout type="log4net.Layout.ExceptionLayout"/>
  </parameter>

</appender>
4

1 に答える 1

0

まず、カスタム AdoNetAppenderParameter を作成しました。

public class IsCriticalAdoNetParameter : AdoNetAppenderParameter
{
    public override void FormatValue(IDbCommand command, LoggingEvent loggingEvent)
    {
        // Lookup the parameter
        IDbDataParameter param = (IDbDataParameter)command.Parameters[ParameterName];

        param.Value = loggingEvent.Level > Level.Warn;
    }
}

次に、app.config の ADO Net Appender で参照しました。Insert ステートメントの変更と追加された<paramemter>タグに注意してください。パラメータの type 属性は、カスタム アペンダーのアセンブリ/クラス名を参照します。

 <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1"/>
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <connectionString value="Data Source=localhost\SQLEXPRESS;Initial Catalog=my_db;Integrated Security=True"/>
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[IsCritical]) VALUES&#xD;&#xA;       (@log_date, @thread, @log_level, @logger, @message, @exception, @is_critical)"
                                                                       />
      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.RawUtcTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="32"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%t"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <size value="512"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%p"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="512"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%c"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="4000"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception"/>
        <dbType value="String"/>
        <size value="2000"/>
        <layout type="log4net.Layout.ExceptionLayout"/>
      </parameter>
      <parameter type="MyApp.Logging.IsCriticalAdoNetParameter">
        <parameterName value="@is_critical"/>
        <dbType value="Boolean"/>
        <size value="10"/>
        <layout type="log4net.Layout.PatternLayout" value=""/>
      </parameter>
    </appender>

この概念を使用して、独自のアペンダー パラメーターを作成できます。

于 2013-03-28T19:06:21.627 に答える