
The <OnMismatch> and <OnMatch> elements should be embedded in the <filter> element, and not the <evaluator> element. On 22.09.2012 18:16, Fred Toth wrote:
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@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@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
-- Ceki http://tinyurl.com/proLogback