繁体   English   中英

Logback Sifting Appender的不同appender类型

[英]Different appender types for Logback Sifting Appender

我已经像这样配置了一个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人通常不是很大,但全球的是。

这可能吗?

我认为在这种情况下最好的事情是扩展SiftingAppender并覆盖append并抛弃任何没有密钥的东西(而不是使用默认值)。

我能想到的最快的方法是创建两个appender并将事件发送给两者。 然后配置SiftingWhileRejectingDefaultAppender以使用RollingFileAppender并配置SiftingRejectAllButDefaultAppender以使用常规FileAppender。

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);
        }
    }
}

我认为你可以使用groovy配置,如果它是一个选项。 您可以根据鉴别器编写if语句

appender("SIFT", GSiftingAppender) {
 discriminator(MDCBasedDiscriminator) {
      key = "context"
      defaultValue = "global"
 }
 sift {
  if(..) {
         appender(....) {
         }
  }
 }
}

您可以在appender上使用过滤器。 您的appender上的过滤器将包含,其他appender上的过滤器将被排除

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM