1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package ch.qos.logback.classic.blackbox.joran;
16
17 import ch.qos.logback.classic.Level;
18 import ch.qos.logback.classic.Logger;
19 import ch.qos.logback.classic.LoggerContext;
20 import ch.qos.logback.classic.blackbox.BlackboxClassicTestConstants;
21 import ch.qos.logback.classic.joran.JoranConfigurator;
22 import ch.qos.logback.classic.jul.JULHelper;
23 import ch.qos.logback.classic.spi.ILoggingEvent;
24 import ch.qos.logback.classic.util.LogbackMDCAdapter;
25 import ch.qos.logback.core.joran.spi.JoranException;
26 import ch.qos.logback.core.read.ListAppender;
27 import ch.qos.logback.core.testUtil.RandomUtil;
28 import ch.qos.logback.core.testUtil.StringListAppender;
29 import ch.qos.logback.core.util.StatusPrinter;
30 import org.junit.jupiter.api.Disabled;
31 import org.junit.jupiter.api.Test;
32
33 import java.io.IOException;
34
35 import static org.junit.jupiter.api.Assertions.assertEquals;
36 import static org.junit.jupiter.api.Assertions.assertNotNull;
37 import static org.junit.jupiter.api.Assertions.assertNull;
38 import static org.junit.jupiter.api.Assertions.assertTrue;
39
40 public class BlackboxJoranConfiguratorTest {
41 LoggerContext loggerContext = new LoggerContext();
42 LogbackMDCAdapter logbackMDCAdapter = new LogbackMDCAdapter();
43 Logger logger = loggerContext.getLogger(this.getClass().getName());
44 Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
45 StatusChecker checker = new StatusChecker(loggerContext);
46 int diff = RandomUtil.getPositiveInt();
47
48 void configure(String file) throws JoranException {
49 loggerContext.setMDCAdapter(logbackMDCAdapter);
50 JoranConfigurator jc = new JoranConfigurator();
51 jc.setContext(loggerContext);
52 loggerContext.putProperty("diff", "" + diff);
53 jc.doConfigure(file);
54
55 }
56
57 @Test
58 public void eval() throws JoranException {
59 configure(BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "callerData.xml");
60 String msg = "hello world";
61 logger.debug("toto");
62 logger.debug(msg);
63
64 StringListAppender<ILoggingEvent> slAppender = (StringListAppender<ILoggingEvent>) loggerContext
65 .getLogger("root").getAppender("STR_LIST");
66 assertNotNull(slAppender);
67 assertEquals(2, slAppender.strList.size());
68 assertTrue(slAppender.strList.get(0).contains(" DEBUG - toto"));
69
70 String str1 = slAppender.strList.get(1);
71 assertTrue(str1.contains("Caller+0"));
72 assertTrue(str1.contains(" DEBUG - hello world"));
73 }
74
75 @Disabled
76 @Test
77 public void testEvaluatorFilter() throws JoranException {
78 configure(BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "evaluatorFilter.xml");
79
80
81
82 logger.warn("hello");
83 logger.error("to be ignored");
84
85 ListAppender<ILoggingEvent> listAppender = (ListAppender<ILoggingEvent>) root.getAppender("LIST");
86
87 assertNotNull(listAppender);
88 assertEquals(1, listAppender.list.size());
89 ILoggingEvent back = listAppender.list.get(0);
90 assertEquals(Level.WARN, back.getLevel());
91 assertEquals("hello", back.getMessage());
92 }
93
94 @Disabled
95 @Test
96 public void testEvaluatorFilterWithImports() throws JoranException {
97 configure(BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "evaluatorFilterWithImports.xml");
98
99
100
101 logger.warn("hello");
102 logger.error("to be ignored");
103
104 ListAppender<ILoggingEvent> listAppender = (ListAppender<ILoggingEvent>) root.getAppender("LIST");
105
106 assertNotNull(listAppender);
107 assertEquals(1, listAppender.list.size());
108 ILoggingEvent back = listAppender.list.get(0);
109 assertEquals(Level.WARN, back.getLevel());
110 assertEquals("hello", back.getMessage());
111 }
112
113 @Test
114 public void conditional1673() throws JoranException {
115 loggerContext.putProperty("EXTRA", "true");
116 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "issues/logback_1673.xml";
117 configure(configFileAsStr);
118 }
119
120 @Test
121 public void conditional1673bisWithActiveThen() throws JoranException {
122 loggerContext.putProperty("EXTRA", "true");
123 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "issues/logback_1673bis.xml";
124 configure(configFileAsStr);
125 Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
126 ListAppender<ILoggingEvent> listThen = (ListAppender<ILoggingEvent>) root.getAppender("LIST_THEN");
127 assertNotNull(listThen);
128
129 ListAppender<ILoggingEvent> listElse = (ListAppender<ILoggingEvent>) root.getAppender("LIST_ELSE");
130 assertNull(listElse);
131 }
132
133 @Test
134 public void conditional1673bisWithActiveElse() throws JoranException {
135 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "issues/logback_1673bis.xml";
136 configure(configFileAsStr);
137 Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
138 ListAppender<ILoggingEvent> listThen = (ListAppender<ILoggingEvent>) root.getAppender("LIST_THEN");
139 assertNull(listThen);
140
141 ListAppender<ILoggingEvent> listElse = (ListAppender<ILoggingEvent>) root.getAppender("LIST_ELSE");
142 assertNotNull(listElse);
143 }
144
145 @Test
146 public void nestedIf() throws JoranException {
147 loggerContext.putProperty("EXTRA", "true");
148 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "issues/logback_1678.xml";
149 configure(configFileAsStr);
150 StatusPrinter.print(loggerContext);
151
152 }
153
154 @Test
155 public void levelChangePropagator0() throws JoranException, IOException, InterruptedException {
156 String loggerName = "changePropagator0" + diff;
157 java.util.logging.Logger.getLogger(loggerName).setLevel(java.util.logging.Level.INFO);
158 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "/jul/levelChangePropagator0.xml";
159 configure(configFileAsStr);
160
161 checker.assertIsErrorFree();
162 verifyJULLevel(loggerName, null);
163 verifyJULLevel("a.b.c." + diff, Level.WARN);
164 verifyJULLevel(Logger.ROOT_LOGGER_NAME, Level.TRACE);
165 }
166
167 @Test
168 public void levelChangePropagator1() throws JoranException, IOException, InterruptedException {
169 String loggerName = "changePropagator1" + diff;
170 java.util.logging.Logger logger1 = java.util.logging.Logger.getLogger(loggerName);
171 logger1.setLevel(java.util.logging.Level.INFO);
172 verifyJULLevel(loggerName, Level.INFO);
173 String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "/jul/levelChangePropagator1.xml";
174 configure(configFileAsStr);
175
176 checker.assertIsErrorFree();
177 verifyJULLevel(loggerName, Level.INFO);
178 verifyJULLevel("a.b.c." + diff, Level.WARN);
179 verifyJULLevel(Logger.ROOT_LOGGER_NAME, Level.TRACE);
180 }
181
182 void verifyJULLevel(String loggerName, Level expectedLevel) {
183 java.util.logging.Logger julLogger = JULHelper.asJULLogger(loggerName);
184 java.util.logging.Level julLevel = julLogger.getLevel();
185
186 if (expectedLevel == null) {
187 assertNull(julLevel);
188 } else {
189 assertEquals(JULHelper.asJULLevel(expectedLevel), julLevel);
190 }
191 }
192
193
194 }