[logback-dev] branch, master, updated. ef5a12d9162edc1cd94e5b71f4a58c3784e236be

added by portage for gitosis-gentoo git-noreply at pixie.qos.ch
Mon Nov 9 22:44:17 CET 2009


The branch, master has been updated
       via  ef5a12d9162edc1cd94e5b71f4a58c3784e236be (commit)
      from  93098a6ca9cfb47dc87cd10e035d5f678723b1f5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=ef5a12d9162edc1cd94e5b71f4a58c3784e236be
http://github.com/ceki/logback/commit/ef5a12d9162edc1cd94e5b71f4a58c3784e236be

commit ef5a12d9162edc1cd94e5b71f4a58c3784e236be
Author: Ceki Gulcu <ceki at qos.ch>
Date:   Mon Nov 9 22:43:04 2009 +0100

    working on the filters.html chapter

diff --git a/logback-classic/pom.xml b/logback-classic/pom.xml
index 26beab2..a69ccb9 100644
--- a/logback-classic/pom.xml
+++ b/logback-classic/pom.xml
@@ -214,9 +214,7 @@
               *
             </Import-Package>
 
-            <Bundle-RequiredExecutionEnvironment>
-              J2SE-1.5
-            </Bundle-RequiredExecutionEnvironment>
+            <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
           </instructions>
         </configuration>
       </plugin>
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java b/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java
index c40b6db..093cc8e 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java
@@ -52,7 +52,6 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent
     DEFAULT_PARAM_NAME_LIST.add("marker");
     DEFAULT_PARAM_NAME_LIST.add("mdc");
     DEFAULT_PARAM_NAME_LIST.add("throwable");
-
     
     DEFAULT_PARAM_TYPE_LIST.add(int.class);
     DEFAULT_PARAM_TYPE_LIST.add(int.class);
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/filter/LevelFilter.java b/logback-classic/src/main/java/ch/qos/logback/classic/filter/LevelFilter.java
index 27db72b..336f13c 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/filter/LevelFilter.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/filter/LevelFilter.java
@@ -19,40 +19,36 @@ import ch.qos.logback.core.filter.AbstractMatcherFilter;
 import ch.qos.logback.core.spi.FilterReply;
 
 /**
- * A class that filters events depending on their level.
- * 
- * One can specify a level and the behaviour of the filter when 
- * said level is encountered in a logging event.
- *
- * For more information about filters, please refer to the online manual at
- * http://logback.qos.ch/manual/filters.html
+ * A class that filters events by the level equality.
+
+ * <p>
+ * For more information about this filter, please refer to the online manual at
+ * http://logback.qos.ch/manual/filters.html#levelFilter
  * 
  * @author Ceki G&uuml;lc&uuml;
  * @author S&eacute;bastien Pennec
  */
-public class LevelFilter extends AbstractMatcherFilter {
+public class LevelFilter extends AbstractMatcherFilter<ILoggingEvent> {
 
   Level level;
-  
+
   @Override
-  public FilterReply decide(Object eventObject) {
+  public FilterReply decide(ILoggingEvent event) {
     if (!isStarted()) {
       return FilterReply.NEUTRAL;
     }
-    
-    ILoggingEvent event = (ILoggingEvent)eventObject;
-    
+
     if (event.getLevel().equals(level)) {
       return onMatch;
     } else {
       return onMismatch;
     }
   }
-  
+
   public void setLevel(String level) {
     this.level = Level.toLevel(level);
   }
-  
+
   public void start() {
     if (this.level != null) {
       super.start();
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/filter/ThresholdFilter.java b/logback-classic/src/main/java/ch/qos/logback/classic/filter/ThresholdFilter.java
index 7ba9b8f..9bf1c2f 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/filter/ThresholdFilter.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/filter/ThresholdFilter.java
@@ -19,31 +19,29 @@ import ch.qos.logback.core.filter.Filter;
 import ch.qos.logback.core.spi.FilterReply;
 
 /**
- * A class that filters events depending on their level.
+ * Filters events below the threshold level.
  * 
- * All events with a level under or above the specified
- * level will be denied, while all events with a level
+ * Events with a level below the specified
+ * level will be denied, while events with a level
  * equal or above the specified level will trigger a
  * FilterReply.NEUTRAL result, to allow the rest of the
  * filter chain process the event.
  * 
  * For more information about filters, please refer to the online manual at
- * http://logback.qos.ch/manual/filters.html
+ * http://logback.qos.ch/manual/filters.html#thresholdFilter
  *
  * @author S&eacute;bastien Pennec
  */
-public class ThresholdFilter extends Filter {
+public class ThresholdFilter extends Filter<ILoggingEvent> {
 
   Level level;
   
   @Override
-  public FilterReply decide(Object eventObject) {
+  public FilterReply decide(ILoggingEvent event) {
     if (!isStarted()) {
       return FilterReply.NEUTRAL;
     }
     
-    ILoggingEvent event = (ILoggingEvent)eventObject;
-    
     if (event.getLevel().isGreaterOrEqual(level)) {
       return FilterReply.NEUTRAL;
     } else {
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java
index 7d750f2..13e8ecf 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java
@@ -113,6 +113,23 @@ public class JaninoEventEvaluatorTest  {
   }
 
   @Test
+  public void testWithNullMarker_LBCORE_118() throws Exception {
+    JaninoEventEvaluator jee = new JaninoEventEvaluator();
+    jee.setExpression("marker.contains(\"BLUE\")");
+    jee.setContext(loggerContext);
+    jee.addMatcher(matcherX);
+    jee.start();
+
+    ILoggingEvent event = makeLoggingEvent(null);
+    try {
+      jee.evaluate(event);
+      fail("We should not reach this point");
+    } catch (EvaluationException ee) {
+
+    }
+  }
+
+  @Test
   public void testWithNullMarker() throws Exception {
     JaninoEventEvaluator jee = new JaninoEventEvaluator();
     jee.setExpression("marker.contains(\"BLUE\")");
@@ -129,6 +146,8 @@ public class JaninoEventEvaluatorTest  {
     }
   }
 
+  
+  
   @Test
   public void testComplex() throws Exception {
 
diff --git a/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java b/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java
index 5c10720..28b14ac 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java
@@ -17,36 +17,35 @@ import ch.qos.logback.core.spi.ContextAware;
 import ch.qos.logback.core.spi.LifeCycle;
 
 /**
- * An EventEvaluator has the responsibility to evaluate whether a given an event
- * matches a given criteria. 
+ * Evaluates whether a given an event matches user-specified criteria.
  * 
- * <p>Implementations are free to evaluate the event as they see fit. In 
+ * <p>
+ * Implementations are free to evaluate the event as they see fit. In
  * particular, the evaluation results <em>may</em> depend on previous events.
- *    
+ * 
  * @author Ceki G&uuml;lc&uuml;
  */
 
 public interface EventEvaluator<E> extends ContextAware, LifeCycle {
-  
 
   /**
-   * Evaluates whether the event passed as parameter matches this evaluator's 
-   * matching criteria.
+   * Evaluates whether the event passed as parameter matches some user-specified
+   * criteria.
    * 
-   * <p>The <code>Evaluator</code> instance is free to evaluate the event as
-   * it pleases. In particular, the evaluation results <em>may</em> depend on 
-   * previous events. 
+   * <p>
+   * The <code>Evaluator</code> is free to evaluate the event as it pleases. In
+   * particular, the evaluation results <em>may</em> depend on previous events.
    * 
-   * @param event The event to evaluate
-   * @return true if there is a match, false otherwise. 
-   * @throws NullPointerException can be thrown in presence of null values
-   * @throws EvaluationException Thrown during evaluation
+   * @param event
+   *          The event to evaluate
+   * @return true if there is a match, false otherwise.
+   * @throws NullPointerException
+   *           can be thrown in presence of null values
+   * @throws EvaluationException
+   *           may be thrown during faulty evaluation
    */
   boolean evaluate(E event) throws NullPointerException, EvaluationException;
-  
-  
-  
-  
+
   /**
    * Evaluators are named entities.
    * 
@@ -54,7 +53,6 @@ public interface EventEvaluator<E> extends ContextAware, LifeCycle {
    */
   public String getName();
 
-  
   /**
    * Evaluators are named entities.
    */
diff --git a/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java b/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java
index 5e03a16..fce2ad3 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java
@@ -18,7 +18,14 @@ import java.util.List;
 
 import org.codehaus.janino.ExpressionEvaluator;
 
-abstract public class JaninoEventEvaluatorBase<E> extends EventEvaluatorBase<E>{
+/**
+ * Abstract class which sets the groundwork for janino based evaluations.
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ * 
+ * @param <E>
+ */
+abstract public class JaninoEventEvaluatorBase<E> extends EventEvaluatorBase<E> {
 
   static Class EXPRESSION_TYPE = boolean.class;
   static Class[] THROWN_EXCEPTIONS = new Class[1];
@@ -27,7 +34,6 @@ abstract public class JaninoEventEvaluatorBase<E> extends EventEvaluatorBase<E>{
   static {
     THROWN_EXCEPTIONS[0] = EvaluationException.class;
   }
-  
 
   private String expression;
 
@@ -60,7 +66,8 @@ abstract public class JaninoEventEvaluatorBase<E> extends EventEvaluatorBase<E>{
 
   public boolean evaluate(E event) throws EvaluationException {
     if (!isStarted()) {
-      throw new IllegalStateException("Evaluator [" + name + "] was called in stopped state");
+      throw new IllegalStateException("Evaluator [" + name
+          + "] was called in stopped state");
     }
     try {
       Boolean result = (Boolean) ee.evaluate(getParameterValues(event));
diff --git a/logback-examples/src/main/java/chapter6/SampleFilter.java b/logback-examples/src/main/java/chapter6/SampleFilter.java
index a4b60c6..bf7ee9d 100644
--- a/logback-examples/src/main/java/chapter6/SampleFilter.java
+++ b/logback-examples/src/main/java/chapter6/SampleFilter.java
@@ -17,11 +17,10 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.filter.Filter;
 import ch.qos.logback.core.spi.FilterReply;
 
-public class SampleFilter extends Filter {
+public class SampleFilter extends Filter<ILoggingEvent> {
 
   @Override
-  public FilterReply decide(Object eventObject) {
-    ILoggingEvent event = (ILoggingEvent)eventObject;
+  public FilterReply decide(ILoggingEvent event) {
     if (event.getMessage() != null && event.getMessage().contains("sample")) {
       return FilterReply.ACCEPT;
     } else {
diff --git a/logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml b/logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml
index 4e6738e..bcdb27f 100644
--- a/logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml
+++ b/logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml
@@ -2,14 +2,19 @@
 
 <configuration>
   <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+
+    <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
       <level>INFO</level>
     </filter>
-    <layout class="ch.qos.logback.classic.PatternLayout">
+    <layout>
       <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
     </layout>
   </appender>
+
+  
   <root level="DEBUG">
     <appender-ref ref="CONSOLE" />
   </root>
+
 </configuration>
\ No newline at end of file
diff --git a/logback-site/src/site/pages/manual/filters.html b/logback-site/src/site/pages/manual/filters.html
index 3d0ebb9..957ba15 100644
--- a/logback-site/src/site/pages/manual/filters.html
+++ b/logback-site/src/site/pages/manual/filters.html
@@ -60,69 +60,62 @@
 		
     <h3><a name="filter" href="#filter">Regular filters</a></h3>
 
-		<p>Any regular logback-classic filter extends the <a
+		<p>Regular logback-classic filters extend the <a
 		href="../xref/ch/qos/logback/core/filter/Filter.html"><code>Filter</code></a>
-		abstract class which consists of the <code>decide(Object
-		event)</code> method taking an <code>ILoggingEvent</code> instance
-		as parameter. Logback-classic will ask any given filter to decide
-		what to do with newly created events.
+		abstract class which essentially consists of a single method,
+		<code>decide()</code> method taking an <code>ILoggingEvent</code>
+		instance as parameter.
 		</p>
 		
 
 		<p>Filters are organized as an ordered list and are based on
-		ternary logic. The <code>decide(Object event)</code> method of
-		each filter is called in sequence.  This method returns one of the
-		<a
+		ternary logic. The <code>decide(ILoggingEvent event)</code> method
+		of each filter is called in sequence.  This method returns one of
+		the <a
 		href="../xref/ch/qos/logback/core/spi/FilterReply.html"><code>FilterReply</code></a>
-		enumeration values, i.e. one of <code>FilterReply.DENY</code>,
-		<code>FilterReply.NEUTRAL</code> or
-		<code>FilterReply.ACCEPT</code>.  If the value returned by
-		<code>decide</code>() is <code>FilterReply.DENY</code>, then the
+		enumeration values, i.e. one of <code>DENY</code>,
+		<code>NEUTRAL</code> or <code>ACCEPT</code>.  If the value
+		returned by <code>decide</code>() is <code>DENY</code>, then the
 		log event is dropped immediately without consulting the remaining
-		filters. If the value returned is
-		<code>FilterReply.NEUTRAL</code>, then the next filter in the
-		chain is consulted. If there are no further filters to consult,
-		then the logging event is processed normally.  If the returned
-		value is <code>FilterReply.ACCEPT</code>, then the logging event
-		is processed immediately skipping the remaining filters.
+		filters. If the value returned is <code>NEUTRAL</code>, then the
+		next filter in the list is consulted. If there are no further
+		filters to consult, then the logging event is processed normally.
+		If the returned value is <code>ACCEPT</code>, then the logging
+		event is processed immediately skipping the invocation of the
+		remaining filters.
     </p>
     
-    <p>In logback-classic <code>Filter</code> objects can be added to
-    <code>Appender</code> instances. By adding filters to an appender
-    you can filter events by various criteria, such as the contents of
-    the log message, the contents of the MDC, the time of day or any
-    other part of the logging event.
+    <p>In logback-classic, filters can be added to
+    <code>Appender</code> instances. By adding one or more filters to
+    an appender, you can filter events by arbitrary criteria, such as
+    the contents of the log message, the contents of the MDC, the time
+    of day or any other part of the logging event.
     </p>
     
 		<h3>Implementing your own Filter</h3>
 		
-		<p>Creating your own filter is not difficult. All you have to do
-		is extend the <code>Filter</code> abstract class. The only method
-		that you will have to implement is the <code>decide()</code>
-		method, allowing you to concentrate only on the behaviour of your
-		filter.
+		<p>Creating your own filter is easy. All you have to do is extend
+		the <code>Filter</code> abstract class and implement the
+		<code>decide()</code> method.
 		</p>
 		
-		<p>The next class is all it takes to implement one's own
-		filter. All it does is accept logging events who's message
-		contains the String <em>sample</em>. The filter will give a
-		neutral response to any logging event whose message does not
-		contain this String.
+		<p>The SampleFilter class shown below provides an example. Its
+		<code>decide</code> method returns ACCEPT for logging events
+		containing the string "sample" in its message field. For other
+		events, the value NEUTRAL is returned.
 		</p>
 		
 <em>Example 6.1: Basic custom filter (<a href="../xref/chapter6/SampleFilter.html">logback-examples/src/main/java/chapter6/SampleFilter.java</a>)</em>		
 <pre class="prettyprint source">package chapter6;
 
-import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.filter.Filter;
 import ch.qos.logback.core.spi.FilterReply;
 
-public class SampleFilter extends Filter {
+public class SampleFilter extends Filter&gt;ILoggingEvent> {
 
   @Override
-  public FilterReply decide(Object eventObject) {
-    LoggingEvent event = (LoggingEvent)eventObject;
-    
+  public FilterReply decide(ILoggingEvent event) {    
     if (event.getMessage().contains("sample")) {
       return FilterReply.ACCEPT;
     } else {
@@ -131,16 +124,14 @@ public class SampleFilter extends Filter {
   }
 }</pre>
 
-		<p>
-			What is shown above might be the simplest filter. Like any filter, it
-			can be attached to any appender using the &lt;Filter&gt; element, as
-			shown below:
+		<p>The configutation files shown next attaches a
+		<code>SampleFilter</code> to a <code>ConsoleAppener</code>.
 		</p>
 
 <em>Example 6.2: SampleFilter configuration (logback-examples/src/main/java/chapter6/SampleFilterConfig.xml)</em>				
 <pre class="prettyprint source">&lt;configuration>
-  &lt;appender name="STDOUT"
-    class="ch.qos.logback.core.ConsoleAppender">
+  &lt;appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+
     <b>&lt;Filter class="chapter6.SampleFilter" /></b>
 
     &lt;layout class="ch.qos.logback.classic.PatternLayout">
@@ -155,34 +146,41 @@ public class SampleFilter extends Filter {
   &lt;/root>
 &lt;/configuration></pre>
 
-		<p>Thanks to Joran, logback's powerful configuration framework,
-		adding an option to such a filter is very easy. Just add the
-		corresponding getter and setter methods in the class, and you can
-		specify the option's value in an xml element, nested within the
-		<em>filter</em> element.
+		<p>With the help of Joran, logback's configuration framework,
+		specifiying properties or sub-componenets to filters is also
+		easy. After adding the corresponding setter method in the filter
+		class, specify the value of the property in an xml element named
+		after the property, nesting it within <code>&lt;filter></code>
+		element. 
 		</p>
 		
-		<p>In case you want to implement a filter that provides different
-		behaviour depending on the result of its test (say, a filter that
-		would accept or deny an event depending on the content of its
-		message), you can extend the
-			<a href="../xref/ch/qos/logback/core/filter/AbstractMatcherFilter.html">
-			<code>AbstractMatcherFilter</code></a> class. It will provide
-			your filter with two properties: <em>OnMatch</em> and
-			<em>OnMismatch</em>, both of which can be configured like any
-			other property.
-		</p>
+		<p>Often times, the desired filter logic consists of two
+		orthogonal parts, a match/mismatch test and a response depending
+		on the match/mismatch. For example, for a given test, say message
+		equals "foobar", one filter might respond ACCEPT on match and
+		NEUTRAL on mismatch, and another filter might respond NEUTRAL on
+		match and DENY on mismatch. 
+    </p>
+
+    <p>Taking notice of this orthogonality, logback ships with the <a
+    href="../xref/ch/qos/logback/core/filter/AbstractMatcherFilter.html">
+    <code>AbstractMatcherFilter</code></a> class which provides a
+    useful skeleton for specifiying the appropriate response on match
+    and on mistmatch, with the help of two properties, named
+    <em>OnMatch</em> and <em>OnMismatch</em>. Most of the regular
+    filters included in logback are derived from
+    <code>AbstractMatcherFilter</code>.
+    </p>
 		
-		<h3>Logback Filters</h3>
+		<h3><a name="levelFilter" href="#levelFilter">LevelFilter</a></h3>
 		
-		<p>At the moment, there are two filters that ship with logback. <a
-		href="../xref/ch/qos/logback/classic/LevelFilter.html">
-		<code>LevelFilter</code></a> provides event filtering based on a
-		<code>Level</code> value.  If the event's level is equal to the
-		configured level, the filter accepts or denies the event,
-		depending on its configuration. It allows you to choose the
-		behaviour of logback for a precise given level. Here is a sample
-		configuration that uses <code>LevelFilter</code>.
+		<p><a href="../xref/ch/qos/logback/classic/LevelFilter.html">
+		<code>LevelFilter</code></a> filters events based on exact level
+		matching. If the event's level is equal to the configured level,
+		the filter accepts or denies the event, depending on the
+		configuration of the <span class="option">onMatch</span> and <span
+		class="option">onMismatch</span> properties. Here is a sample
+		configuration file.
 		</p>
 		
 <em>Example 6.3: Sample LevelFilter configuration (logback-examples/src/main/java/chapter6/levelFilterConfig.xml)</em>				
@@ -194,7 +192,7 @@ public class SampleFilter extends Filter {
       &lt;onMatch>ACCEPT&lt;/onMatch>
       &lt;onMismatch>DENY&lt;/onMismatch>
     &lt;/filter></b>
-    &lt;layout class="ch.qos.logback.classic.PatternLayout">
+    &lt;layout>
       &lt;pattern>
         %-4relative [%thread] %-5level %logger{30} - %msg%n
       &lt;/pattern>
@@ -205,23 +203,27 @@ public class SampleFilter extends Filter {
   &lt;/root>
 &lt;/configuration></pre>
 
-		<p>
-			The second filter that ships with logback is 
-			<a href="../xref/ch/qos/logback/classic/ThresholdFilter.html">
-			<code>ThresholdFilter</code></a>.
-			It is also based on level value, but acts as a threshold to deny any request
-			whose level is not equal or greater to the configured level. A sample
-			use of the <code>ThresholdFilter</code> is shown below.
+   <h3><a name="thresholdFilter" href="#thresholdFilter">ThresholdFilter</a></h3>
+
+		<p>The <a
+		href="../xref/ch/qos/logback/classic/ThresholdFilter.html">
+		<code>ThresholdFilter</code></a> filters events below the
+		specified threshold. For events of level equal or above the
+		threshold, <code>ThresholdFilter</code> will respond NEUTRAL when
+		its <code>decide</code>() method is invoked. However, events with
+		a level below the threshold will be denied. Here is a sample
+		configuration file.
 		</p>
 
 <em>Example 6.4: Sample ThresholdFilter configuration (logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml)</em>				
 <pre class="prettyprint source">&lt;configuration>
   &lt;appender name="CONSOLE"
     class="ch.qos.logback.core.ConsoleAppender">
+    &lt;!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
     <b>&lt;filter class="ch.qos.logback.classic.filter.ThresholdFilter">
       &lt;level>INFO&lt;/level>
     &lt;/filter></b>
-    &lt;layout class="ch.qos.logback.classic.PatternLayout">
+    &lt;layout>
       &lt;pattern>
         %-4relative [%thread] %-5level %logger{30} - %msg%n
       &lt;/pattern>
@@ -233,8 +235,27 @@ public class SampleFilter extends Filter {
 &lt;/configuration></pre>
 
 
-    <h3>Evaluator Filters taking Java Expressions</h3>
+    <h3><a name="evalutatorFilter"
+    href="#evalutatorFilter">EvaluatorFilter</a></h3>
 
+    <p><a
+    href="../xref/ch/qos/logback/core/filter/EvaluatorFilter.html"><code>EvaluatorFilter</code></a>
+    is a generic filter encapsulating an <a
+    href="../xref/ch/qos/logback/core/boolex/EventEvaluator.html">
+    <code>EventEvaluator</code></a> which evaluates whether a given
+    criteria is met. On match and respectively on mismatch, the
+    <code>EvaluatorFilter</code> will return the value set for the
+    <span class="option">OnMatch</span> and respectively for the <span
+    class="option">OnMismatch</span> properties. 
+    </p>
+
+    <p>The <code>EventEvaluator</code> class is abstract and you can
+    implement your own even evaluation logic. Logback-classic ships
+    with a concrete evaluator implementation called <a
+    href="../xref/ch/qos/logback/classic/boolex/JaninoEvaluator.html">JaninoEvaluator</a>
+    which take artibtrary java expressions as the evaluation criteria,
+    enabling unprecedented flexibility for filtering logging events.
+    </p>
 		    
     <p>A special category of filters is implemented by the <a
     href="../xref/ch/qos/logback/core/filter/EvaluatorFilter.html">

-----------------------------------------------------------------------

Summary of changes:
 logback-classic/pom.xml                            |    4 +-
 .../classic/boolex/JaninoEventEvaluator.java       |    1 -
 .../ch/qos/logback/classic/filter/LevelFilter.java |   26 ++--
 .../logback/classic/filter/ThresholdFilter.java    |   14 +-
 .../classic/boolex/JaninoEventEvaluatorTest.java   |   19 ++
 .../ch/qos/logback/core/boolex/EventEvaluator.java |   36 ++--
 .../core/boolex/JaninoEventEvaluatorBase.java      |   13 +-
 .../src/main/java/chapter6/SampleFilter.java       |    5 +-
 .../main/java/chapter6/thresholdFilterConfig.xml   |    7 +-
 logback-site/src/site/pages/manual/filters.html    |  177 +++++++++++---------
 10 files changed, 171 insertions(+), 131 deletions(-)


hooks/post-receive
-- 
Logback: the generic, reliable, fast and flexible logging framework.


More information about the logback-dev mailing list