PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/apache-log4j-1.2.17/tests/src/java/org/apache/log4j/LoggerTestCase.java

#
Java | 499 lines | 351 code | 89 blank | 59 comment | 0 complexity | 56b3a86c4f878af6139d2d7c38d9bc97 MD5 | raw file
Possible License(s): Apache-2.0
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.apache.log4j;
  18. import junit.framework.TestCase;
  19. import org.apache.log4j.spi.LoggingEvent;
  20. import org.apache.log4j.spi.RootLogger;
  21. import org.apache.log4j.spi.LoggerRepository;
  22. import org.apache.log4j.spi.HierarchyEventListener;
  23. import java.util.Enumeration;
  24. import java.util.Locale;
  25. import java.util.ResourceBundle;
  26. import java.util.Vector;
  27. /**
  28. Used for internal unit testing the Logger class.
  29. @author Ceki Gülcü
  30. */
  31. public class LoggerTestCase extends TestCase {
  32. Logger logger;
  33. Appender a1;
  34. Appender a2;
  35. ResourceBundle rbUS;
  36. ResourceBundle rbFR;
  37. ResourceBundle rbCH;
  38. // A short message.
  39. static String MSG = "M";
  40. public LoggerTestCase(String name) {
  41. super(name);
  42. }
  43. public
  44. void setUp() {
  45. rbUS = ResourceBundle.getBundle("L7D", new Locale("en", "US"));
  46. assertNotNull(rbUS);
  47. rbFR = ResourceBundle.getBundle("L7D", new Locale("fr", "FR"));
  48. assertNotNull("Got a null resource bundle.", rbFR);
  49. rbCH = ResourceBundle.getBundle("L7D", new Locale("fr", "CH"));
  50. assertNotNull("Got a null resource bundle.", rbCH);
  51. }
  52. public
  53. void tearDown() {
  54. // Regular users should not use the clear method lightly!
  55. //Logger.getDefaultHierarchy().clear();
  56. BasicConfigurator.resetConfiguration();
  57. a1 = null;
  58. a2 = null;
  59. }
  60. /**
  61. Add an appender and see if it can be retrieved.
  62. */
  63. public
  64. void testAppender1() {
  65. logger = Logger.getLogger("test");
  66. a1 = new FileAppender();
  67. a1.setName("testAppender1");
  68. logger.addAppender(a1);
  69. Enumeration enumeration = logger.getAllAppenders();
  70. Appender aHat = (Appender) enumeration.nextElement();
  71. assertEquals(a1, aHat);
  72. }
  73. /**
  74. Add an appender X, Y, remove X and check if Y is the only
  75. remaining appender.
  76. */
  77. public
  78. void testAppender2() {
  79. a1 = new FileAppender();
  80. a1.setName("testAppender2.1");
  81. a2 = new FileAppender();
  82. a2.setName("testAppender2.2");
  83. logger = Logger.getLogger("test");
  84. logger.addAppender(a1);
  85. logger.addAppender(a2);
  86. logger.removeAppender("testAppender2.1");
  87. Enumeration enumeration = logger.getAllAppenders();
  88. Appender aHat = (Appender) enumeration.nextElement();
  89. assertEquals(a2, aHat);
  90. assertTrue(!enumeration.hasMoreElements());
  91. }
  92. /**
  93. Test if logger a.b inherits its appender from a.
  94. */
  95. public
  96. void testAdditivity1() {
  97. Logger a = Logger.getLogger("a");
  98. Logger ab = Logger.getLogger("a.b");
  99. CountingAppender ca = new CountingAppender();
  100. a.addAppender(ca);
  101. assertEquals(ca.counter, 0);
  102. ab.debug(MSG); assertEquals(ca.counter, 1);
  103. ab.info(MSG); assertEquals(ca.counter, 2);
  104. ab.warn(MSG); assertEquals(ca.counter, 3);
  105. ab.error(MSG); assertEquals(ca.counter, 4);
  106. }
  107. /**
  108. Test multiple additivity.
  109. */
  110. public
  111. void testAdditivity2() {
  112. Logger a = Logger.getLogger("a");
  113. Logger ab = Logger.getLogger("a.b");
  114. Logger abc = Logger.getLogger("a.b.c");
  115. Logger x = Logger.getLogger("x");
  116. CountingAppender ca1 = new CountingAppender();
  117. CountingAppender ca2 = new CountingAppender();
  118. a.addAppender(ca1);
  119. abc.addAppender(ca2);
  120. assertEquals(ca1.counter, 0);
  121. assertEquals(ca2.counter, 0);
  122. ab.debug(MSG);
  123. assertEquals(ca1.counter, 1);
  124. assertEquals(ca2.counter, 0);
  125. abc.debug(MSG);
  126. assertEquals(ca1.counter, 2);
  127. assertEquals(ca2.counter, 1);
  128. x.debug(MSG);
  129. assertEquals(ca1.counter, 2);
  130. assertEquals(ca2.counter, 1);
  131. }
  132. /**
  133. Test additivity flag.
  134. */
  135. public
  136. void testAdditivity3() {
  137. Logger root = Logger.getRootLogger();
  138. Logger a = Logger.getLogger("a");
  139. Logger ab = Logger.getLogger("a.b");
  140. Logger abc = Logger.getLogger("a.b.c");
  141. CountingAppender caRoot = new CountingAppender();
  142. CountingAppender caA = new CountingAppender();
  143. CountingAppender caABC = new CountingAppender();
  144. root.addAppender(caRoot);
  145. a.addAppender(caA);
  146. abc.addAppender(caABC);
  147. assertEquals(caRoot.counter, 0);
  148. assertEquals(caA.counter, 0);
  149. assertEquals(caABC.counter, 0);
  150. ab.setAdditivity(false);
  151. a.debug(MSG);
  152. assertEquals(caRoot.counter, 1);
  153. assertEquals(caA.counter, 1);
  154. assertEquals(caABC.counter, 0);
  155. ab.debug(MSG);
  156. assertEquals(caRoot.counter, 1);
  157. assertEquals(caA.counter, 1);
  158. assertEquals(caABC.counter, 0);
  159. abc.debug(MSG);
  160. assertEquals(caRoot.counter, 1);
  161. assertEquals(caA.counter, 1);
  162. assertEquals(caABC.counter, 1);
  163. }
  164. public
  165. void testDisable1() {
  166. CountingAppender caRoot = new CountingAppender();
  167. Logger root = Logger.getRootLogger();
  168. root.addAppender(caRoot);
  169. LoggerRepository h = LogManager.getLoggerRepository();
  170. //h.disableDebug();
  171. h.setThreshold((Level) Level.INFO);
  172. assertEquals(caRoot.counter, 0);
  173. root.debug(MSG); assertEquals(caRoot.counter, 0);
  174. root.info(MSG); assertEquals(caRoot.counter, 1);
  175. root.log(Level.WARN, MSG); assertEquals(caRoot.counter, 2);
  176. root.warn(MSG); assertEquals(caRoot.counter, 3);
  177. //h.disableInfo();
  178. h.setThreshold((Level) Level.WARN);
  179. root.debug(MSG); assertEquals(caRoot.counter, 3);
  180. root.info(MSG); assertEquals(caRoot.counter, 3);
  181. root.log(Level.WARN, MSG); assertEquals(caRoot.counter, 4);
  182. root.error(MSG); assertEquals(caRoot.counter, 5);
  183. root.log(Level.ERROR, MSG); assertEquals(caRoot.counter, 6);
  184. //h.disableAll();
  185. h.setThreshold(Level.OFF);
  186. root.debug(MSG); assertEquals(caRoot.counter, 6);
  187. root.info(MSG); assertEquals(caRoot.counter, 6);
  188. root.log(Level.WARN, MSG); assertEquals(caRoot.counter, 6);
  189. root.error(MSG); assertEquals(caRoot.counter, 6);
  190. root.log(Level.FATAL, MSG); assertEquals(caRoot.counter, 6);
  191. root.log(Level.FATAL, MSG); assertEquals(caRoot.counter, 6);
  192. //h.disable(Level.FATAL);
  193. h.setThreshold(Level.OFF);
  194. root.debug(MSG); assertEquals(caRoot.counter, 6);
  195. root.info(MSG); assertEquals(caRoot.counter, 6);
  196. root.log(Level.WARN, MSG); assertEquals(caRoot.counter, 6);
  197. root.error(MSG); assertEquals(caRoot.counter, 6);
  198. root.log(Level.ERROR, MSG); assertEquals(caRoot.counter, 6);
  199. root.log(Level.FATAL, MSG); assertEquals(caRoot.counter, 6);
  200. }
  201. public
  202. void testRB1() {
  203. Logger root = Logger.getRootLogger();
  204. root.setResourceBundle(rbUS);
  205. ResourceBundle t = root.getResourceBundle();
  206. assertSame(t, rbUS);
  207. Logger x = Logger.getLogger("x");
  208. Logger x_y = Logger.getLogger("x.y");
  209. Logger x_y_z = Logger.getLogger("x.y.z");
  210. t = x.getResourceBundle(); assertSame(t, rbUS);
  211. t = x_y.getResourceBundle(); assertSame(t, rbUS);
  212. t = x_y_z.getResourceBundle(); assertSame(t, rbUS);
  213. }
  214. public
  215. void testRB2() {
  216. Logger root = Logger.getRootLogger();
  217. root.setResourceBundle(rbUS);
  218. ResourceBundle t = root.getResourceBundle();
  219. assertSame(t, rbUS);
  220. Logger x = Logger.getLogger("x");
  221. Logger x_y = Logger.getLogger("x.y");
  222. Logger x_y_z = Logger.getLogger("x.y.z");
  223. x_y.setResourceBundle(rbFR);
  224. t = x.getResourceBundle(); assertSame(t, rbUS);
  225. t = x_y.getResourceBundle(); assertSame(t, rbFR);
  226. t = x_y_z.getResourceBundle(); assertSame(t, rbFR);
  227. }
  228. public
  229. void testRB3() {
  230. Logger root = Logger.getRootLogger();
  231. root.setResourceBundle(rbUS);
  232. ResourceBundle t = root.getResourceBundle();
  233. assertSame(t, rbUS);
  234. Logger x = Logger.getLogger("x");
  235. Logger x_y = Logger.getLogger("x.y");
  236. Logger x_y_z = Logger.getLogger("x.y.z");
  237. x_y.setResourceBundle(rbFR);
  238. x_y_z.setResourceBundle(rbCH);
  239. t = x.getResourceBundle(); assertSame(t, rbUS);
  240. t = x_y.getResourceBundle(); assertSame(t, rbFR);
  241. t = x_y_z.getResourceBundle(); assertSame(t, rbCH);
  242. }
  243. public
  244. void testExists() {
  245. Logger a = Logger.getLogger("a");
  246. Logger a_b = Logger.getLogger("a.b");
  247. Logger a_b_c = Logger.getLogger("a.b.c");
  248. Logger t;
  249. t = LogManager.exists("xx"); assertNull(t);
  250. t = LogManager.exists("a"); assertSame(a, t);
  251. t = LogManager.exists("a.b"); assertSame(a_b, t);
  252. t = LogManager.exists("a.b.c"); assertSame(a_b_c, t);
  253. }
  254. public
  255. void testHierarchy1() {
  256. Hierarchy h = new Hierarchy(new RootLogger((Level) Level.ERROR));
  257. Logger a0 = h.getLogger("a");
  258. assertEquals("a", a0.getName());
  259. assertNull(a0.getLevel());
  260. assertSame(Level.ERROR, a0.getEffectiveLevel());
  261. Logger a1 = h.getLogger("a");
  262. assertSame(a0, a1);
  263. }
  264. /**
  265. * Tests logger.trace(Object).
  266. * @since 1.2.12
  267. */
  268. public void testTrace() {
  269. VectorAppender appender = new VectorAppender();
  270. appender.activateOptions();
  271. Logger root = Logger.getRootLogger();
  272. root.addAppender(appender);
  273. root.setLevel(Level.INFO);
  274. Logger tracer = Logger.getLogger("com.example.Tracer");
  275. tracer.setLevel(Level.TRACE);
  276. tracer.trace("Message 1");
  277. root.trace("Discarded Message");
  278. root.trace("Discarded Message");
  279. Vector msgs = appender.getVector();
  280. assertEquals(1, msgs.size());
  281. LoggingEvent event = (LoggingEvent) msgs.elementAt(0);
  282. assertEquals(Level.TRACE, event.getLevel());
  283. assertEquals("Message 1", event.getMessage());
  284. }
  285. /**
  286. * Tests logger.trace(Object, Exception).
  287. * @since 1.2.12
  288. */
  289. public void testTraceWithException() {
  290. VectorAppender appender = new VectorAppender();
  291. appender.activateOptions();
  292. Logger root = Logger.getRootLogger();
  293. root.addAppender(appender);
  294. root.setLevel(Level.INFO);
  295. Logger tracer = Logger.getLogger("com.example.Tracer");
  296. tracer.setLevel(Level.TRACE);
  297. NullPointerException ex = new NullPointerException();
  298. tracer.trace("Message 1", ex);
  299. root.trace("Discarded Message", ex);
  300. root.trace("Discarded Message", ex);
  301. Vector msgs = appender.getVector();
  302. assertEquals(1, msgs.size());
  303. LoggingEvent event = (LoggingEvent) msgs.elementAt(0);
  304. assertEquals(Level.TRACE, event.getLevel());
  305. assertEquals("Message 1", event.getMessage());
  306. }
  307. /**
  308. * Tests isTraceEnabled.
  309. * @since 1.2.12
  310. */
  311. public void testIsTraceEnabled() {
  312. VectorAppender appender = new VectorAppender();
  313. appender.activateOptions();
  314. Logger root = Logger.getRootLogger();
  315. root.addAppender(appender);
  316. root.setLevel(Level.INFO);
  317. Logger tracer = Logger.getLogger("com.example.Tracer");
  318. tracer.setLevel(Level.TRACE);
  319. assertTrue(tracer.isTraceEnabled());
  320. assertFalse(root.isTraceEnabled());
  321. }
  322. private static final class CountingHierarchyEventListener implements HierarchyEventListener {
  323. private int addEventCount;
  324. private int removeEventCount;
  325. public CountingHierarchyEventListener() {
  326. addEventCount = removeEventCount = 0;
  327. }
  328. public void addAppenderEvent(Category cat, Appender appender) {
  329. addEventCount++;
  330. }
  331. public void removeAppenderEvent(Category cat, Appender appender) {
  332. removeEventCount++;
  333. }
  334. public int getAddEventCount() {
  335. return addEventCount;
  336. }
  337. public int getRemoveEventCount() {
  338. return removeEventCount;
  339. }
  340. }
  341. public void testAppenderEvent1() {
  342. CountingHierarchyEventListener listener = new CountingHierarchyEventListener();
  343. LogManager.getLoggerRepository().addHierarchyEventListener(listener);
  344. CountingAppender appender = new CountingAppender();
  345. Logger root = Logger.getRootLogger();
  346. root.addAppender(appender);
  347. assertEquals(1, listener.getAddEventCount());
  348. assertEquals(0, listener.getRemoveEventCount());
  349. root.removeAppender(appender);
  350. assertEquals(1, listener.getAddEventCount());
  351. assertEquals(1, listener.getRemoveEventCount());
  352. }
  353. public void testAppenderEvent2() {
  354. CountingHierarchyEventListener listener = new CountingHierarchyEventListener();
  355. LogManager.getLoggerRepository().addHierarchyEventListener(listener);
  356. CountingAppender appender = new CountingAppender();
  357. appender.setName("A1");
  358. Logger root = Logger.getRootLogger();
  359. root.addAppender(appender);
  360. assertEquals(1, listener.getAddEventCount());
  361. assertEquals(0, listener.getRemoveEventCount());
  362. root.removeAppender(appender.getName());
  363. assertEquals(1, listener.getAddEventCount());
  364. assertEquals(1, listener.getRemoveEventCount());
  365. }
  366. public void testAppenderEvent3() {
  367. CountingHierarchyEventListener listener = new CountingHierarchyEventListener();
  368. LogManager.getLoggerRepository().addHierarchyEventListener(listener);
  369. CountingAppender appender = new CountingAppender();
  370. Logger root = Logger.getRootLogger();
  371. root.addAppender(appender);
  372. assertEquals(1, listener.getAddEventCount());
  373. assertEquals(0, listener.getRemoveEventCount());
  374. root.removeAllAppenders();
  375. assertEquals(1, listener.getAddEventCount());
  376. assertEquals(1, listener.getRemoveEventCount());
  377. }
  378. public void testAppenderEvent4() {
  379. CountingHierarchyEventListener listener = new CountingHierarchyEventListener();
  380. LogManager.getLoggerRepository().addHierarchyEventListener(listener);
  381. CountingAppender appender = new CountingAppender();
  382. Logger root = Logger.getRootLogger();
  383. root.addAppender(appender);
  384. assertEquals(1, listener.getAddEventCount());
  385. assertEquals(0, listener.getRemoveEventCount());
  386. LogManager.resetConfiguration();
  387. assertEquals(1, listener.getAddEventCount());
  388. assertEquals(1, listener.getRemoveEventCount());
  389. }
  390. static private class CountingAppender extends AppenderSkeleton {
  391. int counter;
  392. CountingAppender() {
  393. counter = 0;
  394. }
  395. public void close() {
  396. }
  397. public
  398. void append(LoggingEvent event) {
  399. counter++;
  400. }
  401. public
  402. boolean requiresLayout() {
  403. return true;
  404. }
  405. }
  406. }