1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j.bridge;
26
27 import static org.junit.Assert.assertEquals;
28
29 import java.text.MessageFormat;
30 import java.util.ResourceBundle;
31 import java.util.logging.Level;
32
33 import org.apache.log4j.spi.LocationInfo;
34 import org.apache.log4j.spi.LoggingEvent;
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38
39 public class SLF4JBridgeHandlerTest {
40
41 static String LOGGER_NAME = "yay";
42
43 ListAppender listAppender = new ListAppender();
44 org.apache.log4j.Logger log4jRoot;
45 java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger("yay");
46
47 @Before
48 public void setUp() throws Exception {
49 listAppender.extractLocationInfo = true;
50 log4jRoot = org.apache.log4j.Logger.getRootLogger();
51 log4jRoot.addAppender(listAppender);
52 log4jRoot.setLevel(org.apache.log4j.Level.TRACE);
53 }
54
55 @After
56 public void tearDown() throws Exception {
57 SLF4JBridgeHandler.uninstall();
58 log4jRoot.getLoggerRepository().resetConfiguration();
59 }
60
61 @Test
62 public void testSmoke() {
63 SLF4JBridgeHandler.install();
64 String msg = "msg";
65 julLogger.info(msg);
66 assertEquals(1, listAppender.list.size());
67 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
68 assertEquals(LOGGER_NAME, le.getLoggerName());
69 assertEquals(msg, le.getMessage());
70
71
72
73
74
75 LocationInfo li = le.getLocationInformation();
76 System.out.println(li.fullInfo);
77 assertEquals("SLF4JBridgeHandlerTest.java", li.getFileName());
78 assertEquals("testSmoke", li.getMethodName());
79 }
80
81 @Test
82 public void testLevels() {
83 SLF4JBridgeHandler.install();
84 String msg = "msg";
85 julLogger.setLevel(Level.ALL);
86
87 julLogger.finest(msg);
88 julLogger.finer(msg);
89 julLogger.fine(msg);
90 julLogger.info(msg);
91 julLogger.warning(msg);
92 julLogger.severe(msg);
93
94 assertEquals(6, listAppender.list.size());
95 int i = 0;
96 assertLevel(i++, org.apache.log4j.Level.TRACE);
97 assertLevel(i++, org.apache.log4j.Level.DEBUG);
98 assertLevel(i++, org.apache.log4j.Level.DEBUG);
99 assertLevel(i++, org.apache.log4j.Level.INFO);
100 assertLevel(i++, org.apache.log4j.Level.WARN);
101 assertLevel(i++, org.apache.log4j.Level.ERROR);
102 }
103
104 @Test
105 public void testLogWithResourceBundle() {
106 SLF4JBridgeHandler.install();
107
108 String resourceBundleName = "org.slf4j.bridge.testLogStrings";
109 ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName);
110 String resourceKey = "resource_key";
111 String expectedMsg = bundle.getString(resourceKey);
112 String msg = resourceKey;
113
114 java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger.getLogger("yay", resourceBundleName);
115
116 julResourceBundleLogger.info(msg);
117 assertEquals(1, listAppender.list.size());
118 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
119 assertEquals(LOGGER_NAME, le.getLoggerName());
120 assertEquals(expectedMsg, le.getMessage());
121 }
122
123 @Test
124 public void testLogWithResourceBundleWithParameters() {
125 SLF4JBridgeHandler.install();
126
127 String resourceBundleName = "org.slf4j.bridge.testLogStrings";
128 ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName);
129
130 java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger.getLogger("foo", resourceBundleName);
131
132 String resourceKey1 = "resource_key_1";
133 String expectedMsg1 = bundle.getString(resourceKey1);
134 julResourceBundleLogger.info(resourceKey1);
135
136 String resourceKey2 = "resource_key_2";
137 Object[] params2 = new Object[] { "foo", "bar" };
138 String expectedMsg2 = MessageFormat.format(bundle.getString(resourceKey2), params2);
139 julResourceBundleLogger.log(Level.INFO, resourceKey2, params2);
140
141 String resourceKey3 = "invalidKey {0}";
142 Object[] params3 = new Object[] { "John" };
143 String expectedMsg3 = MessageFormat.format(resourceKey3, params3);
144 julResourceBundleLogger.log(Level.INFO, resourceKey3, params3);
145
146 julLogger.log(Level.INFO, resourceKey3, params3);
147
148 assertEquals(4, listAppender.list.size());
149
150 LoggingEvent le = null;
151
152 le = (LoggingEvent) listAppender.list.get(0);
153 assertEquals("foo", le.getLoggerName());
154 assertEquals(expectedMsg1, le.getMessage());
155
156 le = (LoggingEvent) listAppender.list.get(1);
157 assertEquals("foo", le.getLoggerName());
158 assertEquals(expectedMsg2, le.getMessage());
159
160 le = (LoggingEvent) listAppender.list.get(2);
161 assertEquals("foo", le.getLoggerName());
162 assertEquals(expectedMsg3, le.getMessage());
163
164 le = (LoggingEvent) listAppender.list.get(3);
165 assertEquals("yay", le.getLoggerName());
166 assertEquals(expectedMsg3, le.getMessage());
167 }
168
169 @Test
170 public void testLogWithPlaceholderNoParameters() {
171 SLF4JBridgeHandler.install();
172 String msg = "msg {non-number-string}";
173 julLogger.logp(Level.INFO, "SLF4JBridgeHandlerTest", "testLogWithPlaceholderNoParameters", msg, new Object[0]);
174
175 assertEquals(1, listAppender.list.size());
176 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
177 assertEquals(LOGGER_NAME, le.getLoggerName());
178 assertEquals(msg, le.getMessage());
179 }
180
181
182
183 @Test
184 public void illFormattedInputShouldBeReturnedAsIs() {
185 SLF4JBridgeHandler.install();
186 String msg = "foo {18=bad} {0}";
187
188 julLogger.log(Level.INFO, msg, "ignored parameter due to IllegalArgumentException");
189 assertEquals(1, listAppender.list.size());
190 LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
191 assertEquals(msg, le.getMessage());
192 }
193
194 void assertLevel(int index, org.apache.log4j.Level expectedLevel) {
195 LoggingEvent le = (LoggingEvent) listAppender.list.get(index);
196 assertEquals(expectedLevel, le.getLevel());
197 }
198 }