1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.classic.joran;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15
16 import org.junit.Test;
17 import org.slf4j.MDC;
18
19 import ch.qos.logback.classic.Level;
20 import ch.qos.logback.classic.Logger;
21 import ch.qos.logback.classic.LoggerContext;
22 import ch.qos.logback.classic.spi.LoggingEvent;
23 import ch.qos.logback.classic.turbo.DebugUsersTurboFilter;
24 import ch.qos.logback.classic.turbo.NOPTurboFilter;
25 import ch.qos.logback.classic.turbo.TurboFilter;
26 import ch.qos.logback.classic.util.TeztConstants;
27 import ch.qos.logback.core.CoreConstants;
28 import ch.qos.logback.core.joran.spi.JoranException;
29 import ch.qos.logback.core.read.ListAppender;
30 import ch.qos.logback.core.testUtil.StringListAppender;
31
32 public class JoranConfiguratorTest {
33
34 LoggerContext loggerContext = new LoggerContext();
35 Logger logger = loggerContext.getLogger(this.getClass().getName());
36 Logger root = loggerContext.getLogger(LoggerContext.ROOT_NAME);
37
38 void configure(String file) throws JoranException {
39 JoranConfigurator jc = new JoranConfigurator();
40 jc.setContext(loggerContext);
41 jc.doConfigure(file);
42 }
43
44 @Test
45 public void testSimpleList() throws JoranException {
46 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/simpleList.xml");
47
48 Logger logger = loggerContext.getLogger(this.getClass().getName());
49 Logger root = loggerContext.getLogger(LoggerContext.ROOT_NAME);
50 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
51 assertEquals(0, listAppender.list.size());
52 String msg = "hello world";
53 logger.debug(msg);
54 assertEquals(1, listAppender.list.size());
55 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
56 assertEquals(msg, le.getMessage());
57 }
58
59 @Test
60 public void testLevel() throws JoranException {
61 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/simpleLevel.xml");
62 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
63 assertEquals(0, listAppender.list.size());
64 String msg = "hello world";
65 logger.debug(msg);
66 assertEquals(0, listAppender.list.size());
67 }
68
69 @Test
70 public void testRootLoggerLevelSettingBySystemProperty() throws JoranException {
71 String propertyName = "logback.level";
72
73 System.setProperty(propertyName, "INFO");
74 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/rootLevelByProperty.xml");
75
76 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
77 assertEquals(0, listAppender.list.size());
78 String msg = "hello world";
79 logger.debug(msg);
80 assertEquals(0, listAppender.list.size());
81 System.clearProperty(propertyName);
82 }
83
84 @Test
85 public void testLoggerLevelSettingBySystemProperty() throws JoranException {
86 String propertyName = "logback.level";
87
88 System.setProperty(propertyName, "DEBUG");
89 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/loggerLevelByProperty.xml");
90
91 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
92 assertEquals(0, listAppender.list.size());
93 String msg = "hello world";
94 logger.debug(msg);
95 assertEquals(1, listAppender.list.size());
96 System.clearProperty(propertyName);
97 }
98
99 @Test
100 public void testStatusListener() throws JoranException {
101 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/statusListener.xml");
102
103 }
104
105 @Test
106 public void contextRename() throws JoranException {
107 loggerContext.setName(CoreConstants.DEFAULT_CONTEXT_NAME);
108 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/contextRename.xml");
109 assertEquals("wombat", loggerContext.getName());
110 }
111
112 @Test
113 public void testEval() throws JoranException {
114 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/callerData.xml");
115
116 String msg = "hello world";
117 logger.debug("toto");
118 logger.debug(msg);
119
120 StringListAppender<LoggingEvent> slAppender = (StringListAppender<LoggingEvent>) loggerContext
121 .getLogger("root").getAppender("STR_LIST");
122 assertNotNull(slAppender);
123 assertEquals(2, slAppender.strList.size());
124 assertTrue(slAppender.strList.get(0).contains(" DEBUG - toto"));
125
126 String str1 = slAppender.strList.get(1);
127 assertTrue(str1.contains("Caller+0"));
128 assertTrue(str1.contains(" DEBUG - hello world"));
129 }
130
131 @Test
132 public void testTurboFilter() throws JoranException {
133
134
135
136 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/turbo.xml");
137
138 TurboFilter filter = loggerContext.getTurboFilterList().get(0);
139 assertTrue(filter instanceof NOPTurboFilter);
140 }
141
142 @Test
143 public void testTurboFilterWithStringList() throws JoranException {
144
145
146
147
148 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/turbo2.xml");
149
150
151
152 TurboFilter filter = loggerContext.getTurboFilterList().get(0);
153 assertTrue(filter instanceof DebugUsersTurboFilter);
154 DebugUsersTurboFilter dutf = (DebugUsersTurboFilter) filter;
155 assertEquals(2, dutf.getUsers().size());
156 }
157
158 @Test
159 public void testLevelFilter() throws JoranException {
160 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/levelFilter.xml");
161
162
163
164 logger.warn("hello");
165 logger.error("to be ignored");
166
167 @SuppressWarnings("unchecked")
168 ListAppender<LoggingEvent> listAppender = (ListAppender) root
169 .getAppender("LIST");
170
171 assertNotNull(listAppender);
172 assertEquals(1, listAppender.list.size());
173 LoggingEvent back = listAppender.list.get(0);
174 assertEquals(Level.WARN, back.getLevel());
175 assertEquals("hello", back.getMessage());
176 }
177
178 @Test
179 public void testEvaluatorFilter() throws JoranException {
180 configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/evaluatorFilter.xml");
181
182
183
184 logger.warn("hello");
185 logger.error("to be ignored");
186
187 @SuppressWarnings("unchecked")
188 ListAppender<LoggingEvent> listAppender = (ListAppender) root
189 .getAppender("LIST");
190
191 assertNotNull(listAppender);
192 assertEquals(1, listAppender.list.size());
193 LoggingEvent back = listAppender.list.get(0);
194 assertEquals(Level.WARN, back.getLevel());
195 assertEquals("hello", back.getMessage());
196 }
197
198 @Test
199 public void testTurboDynamicThreshold() throws JoranException {
200 configure(TeztConstants.TEST_DIR_PREFIX
201 + "input/joran/turboDynamicThreshold.xml");
202
203 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
204 assertEquals(0, listAppender.list.size());
205
206
207 MDC.put("userId", "user1");
208 logger.debug("hello user1");
209
210 MDC.put("userId", "user2");
211 logger.debug("hello user2");
212
213 assertEquals(1, listAppender.list.size());
214 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
215 assertEquals("hello user2", le.getMessage());
216 }
217
218 @Test
219 public void testTurboDynamicThreshold2() throws JoranException {
220 configure(TeztConstants.TEST_DIR_PREFIX
221 + "input/joran/turboDynamicThreshold2.xml");
222
223 ListAppender listAppender = (ListAppender) root.getAppender("LIST");
224 assertEquals(0, listAppender.list.size());
225
226
227 MDC.put("userId", "user1");
228 logger.debug("hello user1");
229
230 MDC.put("userId", "user2");
231 logger.debug("hello user2");
232
233 MDC.put("userId", "user3");
234 logger.debug("hello user3");
235
236 assertEquals(2, listAppender.list.size());
237 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
238 assertEquals("hello user1", le.getMessage());
239 le = (LoggingEvent) listAppender.list.get(1);
240 assertEquals("hello user2", le.getMessage());
241 }
242 }