2

次のように SiftingAppender を構成しました。

<appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender">

    <discriminator>
        <key>context</key>
        <defaultValue>global</defaultValue>
    </discriminator>

    <!-- sift into different files -->
    <sift>
        <appender name="FILE-${context}" class="ch.qos.logback.core.FileAppender">
            <file>${logroot}/${context}.log</file>
            <encoder>
                <pattern>[%d{HH:mm:ss.SSS}] %-5level %logger{36} [%thread]%n%msg%n</pattern>
            </encoder>
        </appender>
    </sift>

</appender>

今、そこに を入れたいのですRollingFileAppenderが、のないメッセージのみですcontext。を含むものcontextは一般的にそれほど大きくありませんが、グローバルなものは大きくなっています。

これは可能ですか?

4

3 に答える 3

5

この状況で最善のことは、SiftingAppenderを拡張し、appendをオーバーライドして、(デフォルトを使用する代わりに)キーを持たないものをすべて破棄することだと思います。

私が考える最も簡単な方法は、2つのアペンダーを作成し、両方にイベントを送信することです。次に、RollingFileAppenderを使用するようにSiftingWhileRejectingDefaultAppenderを構成し、通常のFileAppenderを使用するようにSiftingRejectAllButDefaultAppenderを構成します。

SiftingWhileRejectingDefaultAppender

import ch.qos.logback.classic.sift.SiftingAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class SiftingWhileRejectingDefaultAppender extends SiftingAppender {

    @Override
    protected void append(ILoggingEvent event) {
        String discriminatingValue = this.getDiscriminator().getDiscriminatingValue(event);
        if (!discriminatingValue.equals("global")) {
            super.append(event);
        }
    }
}

SiftingRejectAllButDefaultAppender

import ch.qos.logback.classic.sift.SiftingAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class SiftingRejectAllButDefaultAppender extends SiftingAppender {

    @Override
    protected void append(ILoggingEvent event) {
        String discriminatingValue = this.getDiscriminator().getDiscriminatingValue(event);
        if (discriminatingValue.equals("global")) {
            super.append(event);
        }
    }
}
于 2012-01-27T18:16:02.930 に答える
3

オプションである場合は、groovy 構成でこれを行うことができると思います。識別子に基づいてif文を書くことができます

appender("SIFT", GSiftingAppender) {
 discriminator(MDCBasedDiscriminator) {
      key = "context"
      defaultValue = "global"
 }
 sift {
  if(..) {
         appender(....) {
         }
  }
 }
}
于 2011-05-31T12:31:43.500 に答える