
The branch, master has been updated via b3f2333b924d4c811059863e92c5b7742580fe47 (commit) from baba96b8e2a916ecee6d3fda41c7040535f5b175 (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=b3f2333b924d4c811059863e9... http://github.com/ceki/logback/commit/b3f2333b924d4c811059863e92c5b7742580fe... commit b3f2333b924d4c811059863e92c5b7742580fe47 Author: Ceki Gulcu <ceki@qos.ch> Date: Tue Nov 10 22:20:58 2009 +0100 - minor adjustments in the comments - editing of filters.html 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 232c689..0bfd020 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 @@ -28,22 +28,20 @@ import ch.qos.logback.core.CoreConstants; import ch.qos.logback.core.boolex.JaninoEventEvaluatorBase; import ch.qos.logback.core.boolex.Matcher; +public class JaninoEventEvaluator extends + JaninoEventEvaluatorBase<ILoggingEvent> { - -public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent> { - - public final static String IMPORT_LEVEL = "import ch.qos.logback.classic.Level;\r\n"; - + public final static List<String> DEFAULT_PARAM_NAME_LIST = new ArrayList<String>(); public final static List<Class> DEFAULT_PARAM_TYPE_LIST = new ArrayList<Class>(); - + static { DEFAULT_PARAM_NAME_LIST.add("DEBUG"); DEFAULT_PARAM_NAME_LIST.add("INFO"); DEFAULT_PARAM_NAME_LIST.add("WARN"); DEFAULT_PARAM_NAME_LIST.add("ERROR"); - + DEFAULT_PARAM_NAME_LIST.add("event"); DEFAULT_PARAM_NAME_LIST.add("message"); @@ -56,12 +54,12 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent DEFAULT_PARAM_NAME_LIST.add("mdc"); DEFAULT_PARAM_NAME_LIST.add("throwableProxy"); DEFAULT_PARAM_NAME_LIST.add("throwable"); - + DEFAULT_PARAM_TYPE_LIST.add(int.class); DEFAULT_PARAM_TYPE_LIST.add(int.class); DEFAULT_PARAM_TYPE_LIST.add(int.class); DEFAULT_PARAM_TYPE_LIST.add(int.class); - + DEFAULT_PARAM_TYPE_LIST.add(ILoggingEvent.class); DEFAULT_PARAM_TYPE_LIST.add(String.class); DEFAULT_PARAM_TYPE_LIST.add(String.class); @@ -74,11 +72,11 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent DEFAULT_PARAM_TYPE_LIST.add(IThrowableProxy.class); DEFAULT_PARAM_TYPE_LIST.add(Throwable.class); } - - + public JaninoEventEvaluator() { - + } + protected String getDecoratedExpression() { return IMPORT_LEVEL + getExpression(); } @@ -87,18 +85,18 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent List<String> fullNameList = new ArrayList<String>(); fullNameList.addAll(DEFAULT_PARAM_NAME_LIST); - for(int i = 0; i < matcherList.size(); i++) { + for (int i = 0; i < matcherList.size(); i++) { Matcher m = (Matcher) matcherList.get(i); fullNameList.add(m.getName()); } - + return (String[]) fullNameList.toArray(CoreConstants.EMPTY_STRING_ARRAY); } protected Class[] getParameterTypes() { List<Class> fullTypeList = new ArrayList<Class>(); fullTypeList.addAll(DEFAULT_PARAM_TYPE_LIST); - for(int i = 0; i < matcherList.size(); i++) { + for (int i = 0; i < matcherList.size(); i++) { fullTypeList.add(Matcher.class); } return (Class[]) fullTypeList.toArray(CoreConstants.EMPTY_CLASS_ARRAY); @@ -106,30 +104,34 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent protected Object[] getParameterValues(ILoggingEvent loggingEvent) { final int matcherListSize = matcherList.size(); - + int i = 0; - Object[] values = new Object[DEFAULT_PARAM_NAME_LIST.size()+matcherListSize]; + Object[] values = new Object[DEFAULT_PARAM_NAME_LIST.size() + + matcherListSize]; values[i++] = Level.DEBUG_INTEGER; values[i++] = Level.INFO_INTEGER; values[i++] = Level.WARN_INTEGER; values[i++] = Level.ERROR_INTEGER; - + values[i++] = loggingEvent; - values[i++] = loggingEvent.getMessage(); - values[i++] = loggingEvent.getFormattedMessage(); + values[i++] = loggingEvent.getMessage(); + values[i++] = loggingEvent.getFormattedMessage(); values[i++] = loggingEvent.getLoggerName(); values[i++] = loggingEvent.getLoggerContextVO(); values[i++] = loggingEvent.getLevel().toInteger(); values[i++] = new Long(loggingEvent.getTimeStamp()); + // In order to avoid NullPointerException, we could push a dummy marker if + // the event's marker is null. However, this would surprise user who + // expect to see a null marker instead of a dummy one. values[i++] = loggingEvent.getMarker(); values[i++] = loggingEvent.getMDCPropertyMap(); - + IThrowableProxy iThrowableProxy = loggingEvent.getThrowableProxy(); - + if (iThrowableProxy != null) { values[i++] = iThrowableProxy; - if(iThrowableProxy instanceof ThrowableProxy) { + if (iThrowableProxy instanceof ThrowableProxy) { values[i++] = ((ThrowableProxy) iThrowableProxy).getThrowable(); } else { values[i++] = null; @@ -138,12 +140,11 @@ public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<ILoggingEvent values[i++] = null; values[i++] = null; } - - - for(int j = 0; j < matcherListSize; j++) { + + for (int j = 0; j < matcherListSize; j++) { values[i++] = (Matcher) matcherList.get(j); } - + return values; } 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 8be5a62..17eabe8 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 @@ -13,6 +13,7 @@ */ package ch.qos.logback.classic.boolex; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -31,15 +32,22 @@ import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.core.boolex.EvaluationException; import ch.qos.logback.core.boolex.JaninoEventEvaluatorBase; import ch.qos.logback.core.boolex.Matcher; +import ch.qos.logback.core.filter.EvaluatorFilter; +import ch.qos.logback.core.spi.FilterReply; +import ch.qos.logback.core.util.StatusPrinter; -public class JaninoEventEvaluatorTest { +public class JaninoEventEvaluatorTest { LoggerContext loggerContext = new LoggerContext(); Logger logger = loggerContext.getLogger(ConverterTest.class); Matcher matcherX = new Matcher(); + JaninoEventEvaluator jee = new JaninoEventEvaluator(); + public JaninoEventEvaluatorTest() { + jee.setContext(loggerContext); + matcherX.setName("x"); matcherX.setRegex("^Some\\s.*"); matcherX.start(); @@ -55,33 +63,27 @@ public class JaninoEventEvaluatorTest { @Test public void testBasic() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("message.equals(\"Some message\")"); - jee.setContext(loggerContext); jee.start(); ILoggingEvent event = makeLoggingEvent(null); - //System.out.println(event); + // System.out.println(event); assertTrue(jee.evaluate(event)); } @Test public void testLevel() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("level > DEBUG"); - jee.setContext(loggerContext); jee.start(); ILoggingEvent event = makeLoggingEvent(null); - //System.out.println(event); + // System.out.println(event); assertTrue(jee.evaluate(event)); } @Test public void testtimeStamp() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("timeStamp > 10"); - jee.setContext(loggerContext); jee.start(); ILoggingEvent event = makeLoggingEvent(null); @@ -90,10 +92,7 @@ public class JaninoEventEvaluatorTest { @Test public void testWithMatcher() throws Exception { - - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("x.matches(message)"); - jee.setContext(loggerContext); jee.addMatcher(matcherX); jee.start(); @@ -102,11 +101,8 @@ public class JaninoEventEvaluatorTest { } @Test - public void testMarker() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); + public void marker() throws Exception { jee.setExpression("marker.contains(\"BLUE\")"); - jee.setContext(loggerContext); - jee.addMatcher(matcherX); jee.start(); LoggingEvent event = makeLoggingEvent(null); @@ -115,11 +111,8 @@ public class JaninoEventEvaluatorTest { } @Test - public void testWithNullMarker_LBCORE_118() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); + public void withNullMarker_LBCORE_118() throws Exception { jee.setExpression("marker.contains(\"BLUE\")"); - jee.setContext(loggerContext); - jee.addMatcher(matcherX); jee.start(); ILoggingEvent event = makeLoggingEvent(null); @@ -127,36 +120,32 @@ public class JaninoEventEvaluatorTest { jee.evaluate(event); fail("We should not reach this point"); } catch (EvaluationException ee) { - + // received an exception as expected } } @Test - public void testWithNullMarker() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); + public void evaluatorFilterWithNullMarker_LBCORE_118() throws Exception { + EvaluatorFilter<ILoggingEvent> ef = new EvaluatorFilter<ILoggingEvent>(); + ef.setContext(loggerContext); + + ef.setOnMatch(FilterReply.ACCEPT); + ef.setOnMismatch(FilterReply.DENY); + jee.setExpression("marker.contains(\"BLUE\")"); - jee.setContext(loggerContext); - jee.addMatcher(matcherX); jee.start(); + ef.setEvaluator(jee); + ef.start(); ILoggingEvent event = makeLoggingEvent(null); - try { - jee.evaluate(event); - fail("We should not reach this point"); - } catch (EvaluationException ee) { - - } + assertEquals(FilterReply.NEUTRAL, ef.decide(event)); + } - - @Test public void testComplex() throws Exception { - - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee .setExpression("level >= INFO && x.matches(message) && marker.contains(\"BLUE\")"); - jee.setContext(loggerContext); jee.addMatcher(matcherX); jee.start(); @@ -166,35 +155,23 @@ public class JaninoEventEvaluatorTest { } /** - * check that evaluator with bogis exp does not start + * check that evaluator with bogus exp does not start * * @throws Exception */ @Test public void testBogusExp1() { - - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("mzzzz.get(\"key\").equals(null)"); - jee.setContext(loggerContext); jee.setName("bogus"); jee.start(); assertFalse(jee.isStarted()); - - // StatusPrinter.print(loggerContext); - // LoggingEvent event = makeLoggingEvent(null); - // event.setMarker(MarkerFactory.getMarker("BLUE")); - // - // jee.evaluate(event); } // check that eval stops after errors @Test public void testBogusExp2() { - - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("mdc.get(\"keyXN89\").equals(null)"); - jee.setContext(loggerContext); jee.setName("bogus"); jee.start(); @@ -222,19 +199,17 @@ public class JaninoEventEvaluatorTest { // with 10 parameters 510 nanos (all levels + fields) void loop(JaninoEventEvaluator jee, String msg) throws Exception { ILoggingEvent event = makeLoggingEvent(null); - //final long start = System.nanoTime(); + // final long start = System.nanoTime(); for (int i = 0; i < LEN; i++) { jee.evaluate(event); } - //final long end = System.nanoTime(); - //System.out.println(msg + (end - start) / LEN + " nanos"); + // final long end = System.nanoTime(); + // System.out.println(msg + (end - start) / LEN + " nanos"); } @Test public void testLoop1() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("timeStamp > 10"); - jee.setContext(loggerContext); jee.start(); loop(jee, "timestamp > 10]: "); @@ -242,32 +217,25 @@ public class JaninoEventEvaluatorTest { @Test public void testLoop2() throws Exception { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("x.matches(message)"); - jee.setContext(loggerContext); jee.addMatcher(matcherX); jee.start(); loop(jee, "x.matches(message): "); } - @Test + @Test public void throwable_LBCLASSIC_155_I() throws EvaluationException { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("throwable instanceof java.io.IOException"); - jee.setContext(loggerContext); jee.start(); LoggingEvent event = makeLoggingEvent(new IOException("")); assertTrue(jee.evaluate(event)); } - - @Test + @Test public void throwable_LBCLASSIC_155_II() throws EvaluationException { - JaninoEventEvaluator jee = new JaninoEventEvaluator(); jee.setExpression("throwableProxy.getClassName().contains(\"IO\")"); - jee.setContext(loggerContext); jee.start(); LoggingEvent event = makeLoggingEvent(new IOException("")); diff --git a/logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml b/logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml index 64d0efb..f2aab92 100644 --- a/logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml +++ b/logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml @@ -9,7 +9,7 @@ <regex>statement [13579]</regex> </matcher> - <expression>message.contains("billing") || odd.matches(formattedMessage)</expression> + <expression>odd.matches(formattedMessage)</expression> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> diff --git a/logback-site/src/site/pages/manual/filters.html b/logback-site/src/site/pages/manual/filters.html index 3b61138..b2aa23c 100644 --- a/logback-site/src/site/pages/manual/filters.html +++ b/logback-site/src/site/pages/manual/filters.html @@ -348,7 +348,9 @@ public class SampleFilter extends Filter>ILoggingEvent> { <td>marker</td> <td><code>Marker</code></td> <td>The <code>Marker</code> object associated with the logging - request. + request. Note that marker can be null and it is your + responsibility to check for this condition in order to avoid + <code>NullPointerException</code>. </td> </tr> <tr> @@ -502,7 +504,7 @@ java chapter6.FilterEvents src/main/java/chapter6/basicConfiguration.xml <em>Example 6.<span class="autoEx"/>: Defining matchers in an event evaluator (logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml)</em> - <pre class="prettyprint source longline"><configuration debug="true"> + <pre class="prettyprint source"><configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> @@ -513,7 +515,7 @@ java chapter6.FilterEvents src/main/java/chapter6/basicConfiguration.xml <regex>statement [13579]</regex> </matcher> - <expression>message.contains("billing") || odd.matches(formattedMessage)</expression></b> + <expression>odd.matches(formattedMessage)</expression></b> </evaluator> <OnMismatch>NEUTRAL</OnMismatch> <OnMatch>DENY</OnMatch> @@ -533,13 +535,14 @@ java chapter6.FilterEvents src/main/java/chapter6/basicConfiguration.xml <p>we obtain: </p> - <p class="source">220 [main] INFO chapter6.FilterEvents - logging statement 0 -223 [main] INFO chapter6.FilterEvents - logging statement 2 -223 [main] INFO chapter6.FilterEvents - logging statement 4 -225 [main] INFO chapter6.FilterEvents - logging statement 8</p> + <p class="source">260 [main] INFO chapter6.FilterEvents - logging statement 0 +264 [main] INFO chapter6.FilterEvents - logging statement 2 +264 [main] INFO chapter6.FilterEvents - logging statement 4 +266 [main] ERROR chapter6.FilterEvents - billing statement 6 +266 [main] INFO chapter6.FilterEvents - logging statement 8</p> <p>In case you need to define additional matchers, you can do so by - adding further <code><matcher></code> elements. + adding further <code><matcher></code> elements.</p> <!-- ================================================================ --> <!-- ===================== TURBO FILTER ============================= --> ----------------------------------------------------------------------- Summary of changes: .../classic/boolex/JaninoEventEvaluator.java | 55 ++++++------ .../classic/boolex/JaninoEventEvaluatorTest.java | 94 +++++++------------- .../main/java/chapter6/evaluatorWithMatcher.xml | 2 +- logback-site/src/site/pages/manual/filters.html | 19 +++-- 4 files changed, 71 insertions(+), 99 deletions(-) hooks/post-receive -- Logback: the generic, reliable, fast and flexible logging framework.