1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  package ch.qos.logback.classic.joran;
11  
12  import static org.junit.Assert.assertFalse;
13  import static org.junit.Assert.assertNotNull;
14  import static org.junit.Assert.assertTrue;
15  
16  import java.util.Map;
17  
18  import org.junit.Test;
19  import org.slf4j.Marker;
20  import org.slf4j.MarkerFactory;
21  
22  import ch.qos.logback.classic.Level;
23  import ch.qos.logback.classic.Logger;
24  import ch.qos.logback.classic.LoggerContext;
25  import ch.qos.logback.classic.boolex.JaninoEventEvaluator;
26  import ch.qos.logback.classic.spi.LoggingEvent;
27  import ch.qos.logback.classic.util.TeztConstants;
28  import ch.qos.logback.core.CoreConstants;
29  import ch.qos.logback.core.boolex.EvaluationException;
30  import ch.qos.logback.core.joran.spi.JoranException;
31  
32  
33  public class EvaluatorJoranTest  {
34  
35    @Test
36    public void testSimpleEvaluator() throws NullPointerException, EvaluationException, JoranException {
37      JoranConfigurator jc = new JoranConfigurator();
38      LoggerContext loggerContext = new LoggerContext();
39      jc.setContext(loggerContext);
40      jc.doConfigure(TeztConstants.TEST_DIR_PREFIX + "input/joran/simpleEvaluator.xml");
41      
42      
43      Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP);
44      assertNotNull(evalMap);
45      JaninoEventEvaluator evaluator = (JaninoEventEvaluator) evalMap.get("msgEval");
46      assertNotNull(evaluator);
47      
48      Logger logger = loggerContext.getLogger("xx");
49      LoggingEvent event0 = new LoggingEvent("foo", logger, Level.DEBUG, "Hello world", null, null);
50      assertTrue(evaluator.evaluate(event0));
51      
52      LoggingEvent event1 = new LoggingEvent("foo", logger, Level.DEBUG, "random blurb", null, null);
53      assertFalse(evaluator.evaluate(event1));
54    }
55    
56    @Test
57    public void testIgnoreMarker() throws NullPointerException, EvaluationException, JoranException {
58      JoranConfigurator jc = new JoranConfigurator();
59      LoggerContext loggerContext = new LoggerContext();
60      jc.setContext(loggerContext);
61      jc.doConfigure(TeztConstants.TEST_DIR_PREFIX + "input/joran/ignore.xml");
62      
63      Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP);
64      assertNotNull(evalMap);
65      
66      Logger logger = loggerContext.getLogger("xx");
67      
68      JaninoEventEvaluator evaluator = (JaninoEventEvaluator) evalMap.get("IGNORE_EVAL");
69      LoggingEvent event = new LoggingEvent("foo", logger, Level.DEBUG, "Hello world",null, null);
70  
71      Marker ignoreMarker = MarkerFactory.getMarker("IGNORE");
72      event.setMarker(ignoreMarker);
73      assertTrue(evaluator.evaluate(event));
74      
75      logger.debug("hello", new Exception("test"));
76      logger.debug(ignoreMarker, "hello ignore", new Exception("test"));
77      
78      //logger.debug("hello", new Exception("test"));
79      
80      //StatusPrinter.print(loggerContext.getStatusManager());
81    }
82    
83    @Test
84    public void testMultipleConditionsInExpression() throws NullPointerException, EvaluationException {
85      LoggerContext loggerContext = new LoggerContext();
86      Logger logger = loggerContext.getLogger("xx");
87      JaninoEventEvaluator ee = new JaninoEventEvaluator();
88      ee.setName("testEval");
89      ee.setContext(loggerContext);
90      //&&
91      //&&
92      ee.setExpression("message.contains(\"stacktrace\") && message.contains(\"logging\")");
93      ee.start();
94      //StatusPrinter.print(loggerContext);
95      
96      String message = "stacktrace bla bla logging";
97      LoggingEvent event = new LoggingEvent(this.getClass().getName(), logger, Level.DEBUG, message, null, null);
98      
99      assertTrue(ee.evaluate(event));
100   }
101 }