[logback-user] Filtering "unknown" mdc discriminator events

Fred Toth ftoth at synernet.com
Sat Sep 22 18:16:20 CEST 2012


Hi,

This has been written about before in this list, and I thought it would 
be easy, but I'm getting nowhere. Can anyone suggest what I'm doing 
wrong? I can confirm that my filter code is running (I see the print 
statements) but no matter what I return, I still end up with a log like 
"unknown/batchqc-<timestamp>" containing plenty of log data.

I would like to eliminate these logs completely, and write logs using 
this sifter only when articlePath is set.

The status listener is reporting:

12:03:35,652 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter at 25:37 
- no applicable action for [OnMismatch], current pattern is 
[[configuration][appender][filter][evaluator][OnMismatch]]
12:03:35,652 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter at 26:34 
- no applicable action for [OnMatch], current pattern is 
[[configuration][appender][filter][evaluator][OnMatch]]

What am I missing?

Config:

<configuration>

     <statusListener 
class="ch.qos.logback.core.status.OnConsoleStatusListener"/>

     <timestamp key="bySecond" datePattern="yyyy-MM-dd-HH-mm-ss" />
     <timestamp key="byDate" datePattern="yyyy-MM-dd" />

     <appender name="ARTICLESIFT" 
class="ch.qos.logback.classic.sift.SiftingAppender">
         <discriminator>
             <key>articlePath</key>
             <defaultValue>unknown</defaultValue>
         </discriminator>
         <sift>
             <appender name="ARTICLESIFT-APPENDER" 
class="ch.qos.logback.core.FileAppender">
                 <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                     <evaluator 
class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
                         <expression>
System.out.println("MDC: " + mdc + " " + mdc.get("articlePath"));
if (mdc == null
     || mdc.get("articlePath") == null
     || ((String)mdc.get("articlePath")).contains("unknown"))
         return false;
return true;
                         </expression>
                         <OnMismatch>NEUTRAL</OnMismatch>
                         <OnMatch>DENY</OnMatch>
                     </evaluator>
                 </filter>
<file>${articlePath}/batchqc-${bySecond}.log</file>
                 <append>false</append>
                 <encoder 
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level 
%logger{0} - %msg%n
                     </pattern>
                 </encoder>
             </appender>
         </sift>
     </appender>

     <appender name="TSFILE" class="ch.qos.logback.core.FileAppender">
         <file>logs/batchqc-${byDate}.log</file>
         <append>true</append>
         <encoder>
             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{0} - 
%msg%n</pattern>
         </encoder>
     </appender>

     <root level="info">
         <appender-ref ref="TSFILE" />
         <appender-ref ref="ARTICLESIFT" />
     </root>
</configuration>

Thanks,

Fred



More information about the Logback-user mailing list