Logback筛选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>
现在,我想在其中有一个“ 1”,但仅适用于没有“ 2”的消息。
context
的那些通常不是很大,但是整体为1。 这可能吗?     
已邀请:
我认为在这种情况下,最好的办法是扩展SiftingAppender并覆盖append并抛出任何没有键的内容(而不是使用默认值)。 我能想到的最快的方法是创建两个追加器,并将事件发送给两个追加器。然后将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(....) {
         }
  }
 }
}
    
您可以在附加程序上使用过滤器。附加器上的过滤器将包含,其他附加器上的过滤器将排除     

要回复问题请先登录注册