2011-04-14 31 views
2

我已經配置了SiftingAppender這樣的:現在不同的appender類型的logback篩分追加程序

<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一般不是很大,但是全球一個是。

這可能嗎?

回答

3

我想你可以用groovy配置來做到這一點,如果它是你的選擇。您可以根據鑑別

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

如果嘗試使用XML配置,並且它不起作用。我收到了「SiftingAppender中的元素中找不到嵌套appender」。因爲它以某種方式不喜歡'如果'。 – 2013-04-10 15:34:39

4

我覺得在這種情況下,最好的辦法是延長SiftingAppender並覆蓋追加和扔掉任何東西,沒有密鑰(而不是使用默認值)寫if語句。

我能想到的最快方法是創建兩個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); 
     } 
    } 
} 
0

您可以使用該追加程序的過濾器。你的appender上的過濾器將包括和其他appenders上的過濾器將排除

+1

您應該包含關於如何使用過濾器的實現。 – UmarZaii 2017-08-08 16:42:56