View Javadoc

1   /**
2    * Copyright (c) 2004-2011 QOS.ch
3    * All rights reserved.
4    *
5    * Permission is hereby granted, free  of charge, to any person obtaining
6    * a  copy  of this  software  and  associated  documentation files  (the
7    * "Software"), to  deal in  the Software without  restriction, including
8    * without limitation  the rights to  use, copy, modify,  merge, publish,
9    * distribute,  sublicense, and/or sell  copies of  the Software,  and to
10   * permit persons to whom the Software  is furnished to do so, subject to
11   * the following conditions:
12   *
13   * The  above  copyright  notice  and  this permission  notice  shall  be
14   * included in all copies or substantial portions of the Software.
15   *
16   * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
17   * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
18   * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
19   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20   * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21   * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
22   * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23   *
24   */
25  package org.slf4j.bridge;
26  
27  import java.text.MessageFormat;
28  import java.util.ResourceBundle;
29  import java.util.logging.Level;
30  
31  import junit.framework.TestCase;
32  
33  import org.apache.log4j.spi.LocationInfo;
34  import org.apache.log4j.spi.LoggingEvent;
35  
36  public class SLF4JBridgeHandlerTest extends TestCase {
37  
38      static String LOGGER_NAME = "yay";
39  
40      ListAppender listAppender = new ListAppender();
41      org.apache.log4j.Logger log4jRoot;
42      java.util.logging.Logger julLogger = java.util.logging.Logger.getLogger("yay");
43  
44      public SLF4JBridgeHandlerTest(String arg0) {
45          super(arg0);
46      }
47  
48      protected void setUp() throws Exception {
49          super.setUp();
50          listAppender.extractLocationInfo = true;
51          log4jRoot = org.apache.log4j.Logger.getRootLogger();
52          log4jRoot.addAppender(listAppender);
53          log4jRoot.setLevel(org.apache.log4j.Level.TRACE);
54      }
55  
56      protected void tearDown() throws Exception {
57          super.tearDown();
58          SLF4JBridgeHandler.uninstall();
59          log4jRoot.getLoggerRepository().resetConfiguration();
60      }
61  
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          // get the location info in the event.
72          // Note that this must have been computed previously
73          // within an appender for the following assertion to
74          // work properly
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      public void testLevels() {
82          SLF4JBridgeHandler.install();
83          String msg = "msg";
84          julLogger.setLevel(Level.ALL);
85  
86          julLogger.finest(msg);
87          julLogger.finer(msg);
88          julLogger.fine(msg);
89          julLogger.info(msg);
90          julLogger.warning(msg);
91          julLogger.severe(msg);
92  
93          assertEquals(6, listAppender.list.size());
94          int i = 0;
95          assertLevel(i++, org.apache.log4j.Level.TRACE);
96          assertLevel(i++, org.apache.log4j.Level.DEBUG);
97          assertLevel(i++, org.apache.log4j.Level.DEBUG);
98          assertLevel(i++, org.apache.log4j.Level.INFO);
99          assertLevel(i++, org.apache.log4j.Level.WARN);
100         assertLevel(i++, org.apache.log4j.Level.ERROR);
101     }
102 
103     public void testLogWithResourceBundle() {
104         SLF4JBridgeHandler.install();
105 
106         String resourceBundleName = "org.slf4j.bridge.testLogStrings";
107         ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName);
108         String resourceKey = "resource_key";
109         String expectedMsg = bundle.getString(resourceKey);
110         String msg = resourceKey;
111 
112         java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger.getLogger("yay", resourceBundleName);
113 
114         julResourceBundleLogger.info(msg);
115         assertEquals(1, listAppender.list.size());
116         LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
117         assertEquals(LOGGER_NAME, le.getLoggerName());
118         assertEquals(expectedMsg, le.getMessage());
119     }
120 
121     public void testLogWithResourceBundleWithParameters() {
122         SLF4JBridgeHandler.install();
123 
124         String resourceBundleName = "org.slf4j.bridge.testLogStrings";
125         ResourceBundle bundle = ResourceBundle.getBundle(resourceBundleName);
126 
127         java.util.logging.Logger julResourceBundleLogger = java.util.logging.Logger.getLogger("foo", resourceBundleName);
128 
129         String resourceKey1 = "resource_key_1";
130         String expectedMsg1 = bundle.getString(resourceKey1);
131         julResourceBundleLogger.info(resourceKey1); // 1st log
132 
133         String resourceKey2 = "resource_key_2";
134         Object[] params2 = new Object[] { "foo", "bar" };
135         String expectedMsg2 = MessageFormat.format(bundle.getString(resourceKey2), params2);
136         julResourceBundleLogger.log(Level.INFO, resourceKey2, params2); // 2nd log
137 
138         String resourceKey3 = "invalidKey {0}";
139         Object[] params3 = new Object[] { "John" };
140         String expectedMsg3 = MessageFormat.format(resourceKey3, params3);
141         julResourceBundleLogger.log(Level.INFO, resourceKey3, params3); // 3rd log
142 
143         julLogger.log(Level.INFO, resourceKey3, params3); // 4th log
144 
145         assertEquals(4, listAppender.list.size());
146 
147         LoggingEvent le = null;
148 
149         le = (LoggingEvent) listAppender.list.get(0);
150         assertEquals("foo", le.getLoggerName());
151         assertEquals(expectedMsg1, le.getMessage());
152 
153         le = (LoggingEvent) listAppender.list.get(1);
154         assertEquals("foo", le.getLoggerName());
155         assertEquals(expectedMsg2, le.getMessage());
156 
157         le = (LoggingEvent) listAppender.list.get(2);
158         assertEquals("foo", le.getLoggerName());
159         assertEquals(expectedMsg3, le.getMessage());
160 
161         le = (LoggingEvent) listAppender.list.get(3);
162         assertEquals("yay", le.getLoggerName());
163         assertEquals(expectedMsg3, le.getMessage());
164     }
165 
166     public void testLogWithPlaceholderNoParameters() {
167         SLF4JBridgeHandler.install();
168         String msg = "msg {non-number-string}";
169         julLogger.logp(Level.INFO, "SLF4JBridgeHandlerTest", "testLogWithPlaceholderNoParameters", msg, new Object[0]);
170 
171         assertEquals(1, listAppender.list.size());
172         LoggingEvent le = (LoggingEvent) listAppender.list.get(0);
173         assertEquals(LOGGER_NAME, le.getLoggerName());
174         assertEquals(msg, le.getMessage());
175     }
176 
177     void assertLevel(int index, org.apache.log4j.Level expectedLevel) {
178         LoggingEvent le = (LoggingEvent) listAppender.list.get(index);
179         assertEquals(expectedLevel, le.getLevel());
180     }
181 }