1 package org.slf4j.issue;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5
6 import java.util.List;
7 import java.util.concurrent.LinkedBlockingQueue;
8 import java.util.logging.Handler;
9 import java.util.logging.Level;
10 import java.util.logging.LogRecord;
11
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 import org.slf4j.event.EventConstants;
18 import org.slf4j.event.SubstituteLoggingEvent;
19 import org.slf4j.helpers.SubstituteLogger;
20 import org.slf4j.helpers.SubstituteServiceProvider;
21 import org.slf4j.jul.ListHandler;
22
23 public class CallerInfoTest {
24 Level oldLevel;
25 java.util.logging.Logger root = java.util.logging.Logger.getLogger("");
26
27 ListHandler listHandler = new ListHandler();
28
29 @Before
30 public void setUp() throws Exception {
31 oldLevel = root.getLevel();
32 root.setLevel(Level.FINE);
33
34 root.addHandler(listHandler);
35 }
36
37 @After
38 public void tearDown() throws Exception {
39 root.setLevel(oldLevel);
40 removeListHandlers(root);
41 }
42
43 void removeListHandlers(java.util.logging.Logger logger) {
44 Handler[] handlers = logger.getHandlers();
45 for (Handler h : handlers) {
46 if (h instanceof ListHandler)
47 logger.removeHandler(h);
48 }
49 }
50
51 @Test
52 public void testCallerInfo() {
53 Logger logger = LoggerFactory.getLogger("bla");
54 logger.debug("hello");
55
56 List<LogRecord> recordList = listHandler.recordList;
57
58 assertEquals(1, recordList.size());
59
60 LogRecord logRecod = recordList.get(0);
61 assertEquals(this.getClass().getName(), logRecod.getSourceClassName());
62 }
63
64
65
66
67 @Test
68 public void testCallerInfoWithFluentAPI() {
69 Logger logger = LoggerFactory.getLogger("bla");
70 logger.atDebug().log("hello");
71
72 List<LogRecord> recordList = listHandler.recordList;
73
74 assertEquals(1, recordList.size());
75
76 LogRecord logRecod = recordList.get(0);
77 assertEquals(this.getClass().getName(), logRecod.getSourceClassName());
78 }
79
80 @Test
81 public void testPostInitializationCallerInfoWithSubstituteLogger() {
82 Logger logger = LoggerFactory.getLogger("bla");
83 SubstituteLogger substituteLogger = new SubstituteLogger("bla", null, false);
84 substituteLogger.setDelegate(logger);
85 substituteLogger.debug("hello");
86
87 List<LogRecord> recordList = listHandler.recordList;
88
89 assertEquals(1, recordList.size());
90
91 LogRecord logRecod = recordList.get(0);
92 assertEquals(CallerInfoTest.class.getName(), logRecod.getSourceClassName());
93 }
94
95
96 @Test
97 public void testIntraInitializationCallerInfoWithSubstituteLogger() throws InterruptedException {
98 SubstituteServiceProvider substituteServiceProvider = new SubstituteServiceProvider();
99 String loggerName = "bkla";
100 substituteServiceProvider.getLoggerFactory().getLogger(loggerName);
101 SubstituteLogger substituteLogger = substituteServiceProvider.getSubstituteLoggerFactory().getLoggers().get(0);
102 assertEquals(loggerName, substituteLogger.getName());
103
104 substituteLogger.debug("jello");
105 Logger logger = LoggerFactory.getLogger(loggerName);
106 substituteLogger.setDelegate(logger);
107
108 final LinkedBlockingQueue<SubstituteLoggingEvent> queue = substituteServiceProvider.getSubstituteLoggerFactory().getEventQueue();
109
110 SubstituteLoggingEvent substituteLoggingEvent = queue.take();
111 assertTrue(substituteLogger.isDelegateEventAware());
112 substituteLogger.log(substituteLoggingEvent);
113
114 List<LogRecord> recordList = listHandler.recordList;
115
116 assertEquals(1, recordList.size());
117
118 LogRecord logRecod = recordList.get(0);
119 assertEquals(EventConstants.NA_SUBST, logRecod.getSourceClassName());
120 }
121
122 }