Merge branch 'master' of github.com:qos-ch/slf4j
diff --git a/slf4j-jdk14/src/main/java/org/slf4j/impl/JDK14LoggerAdapter.java b/slf4j-jdk14/src/main/java/org/slf4j/impl/JDK14LoggerAdapter.java
old mode 100644
new mode 100755
diff --git a/slf4j-jdk14/src/test/java/org/slf4j/InvocationTest.java b/slf4j-jdk14/src/test/java/org/slf4j/InvocationTest.java
old mode 100644
new mode 100755
index 8c14dfa..8eb09e2
--- a/slf4j-jdk14/src/test/java/org/slf4j/InvocationTest.java
+++ b/slf4j-jdk14/src/test/java/org/slf4j/InvocationTest.java
@@ -24,81 +24,110 @@
*/
package org.slf4j;
-import java.util.logging.Level;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
-import junit.framework.TestCase;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
/**
* Test whether invoking the SLF4J API causes problems or not.
- *
- * @author Ceki Gulcu
*
+ * @author Ceki Gulcu
*/
-public class InvocationTest extends TestCase {
+public class InvocationTest {
Level oldLevel;
java.util.logging.Logger root = java.util.logging.Logger.getLogger("");
-
- public InvocationTest (String arg0) {
- super(arg0);
- }
- protected void setUp() throws Exception {
- super.setUp();
+ ListHandler listHandler = new ListHandler();
+
+ @Before
+ public void setUp() throws Exception {
oldLevel = root.getLevel();
- root.setLevel(Level.OFF);
+ root.setLevel(Level.FINE);
+ //removeAllHandlers(root);
+ root.addHandler(listHandler);
}
- protected void tearDown() throws Exception {
- super.tearDown();
+
+ @After
+ public void tearDown() throws Exception {
root.setLevel(oldLevel);
+ removeListHandlers(root);
}
-
+
+ @Test
public void test1() {
Logger logger = LoggerFactory.getLogger("test1");
logger.debug("Hello world.");
+ assertLogMessage("Hello world.", 0);
}
-
- public void test2() {
+
+
+ @Test
+ public void verifyMessageFormatting() {
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Integer i3 = new Integer(3);
Exception e = new Exception("This is a test exception.");
Logger logger = LoggerFactory.getLogger("test2");
-
- logger.debug("Hello world 1.");
+
+ int index = 0;
+ logger.debug("Hello world");
+ assertLogMessage("Hello world", index++);
+
logger.debug("Hello world {}", i1);
+ assertLogMessage("Hello world " + i1, index++);
+
logger.debug("val={} val={}", i1, i2);
+ assertLogMessage("val=1 val=2", index++);
+
logger.debug("val={} val={} val={}", new Object[]{i1, i2, i3});
+ assertLogMessage("val=1 val=2 val=3", index++);
logger.debug("Hello world 2", e);
+ assertLogMessage("Hello world 2", index);
+ assertException(e.getClass(), index++);
logger.info("Hello world 2.");
-
-
+
logger.warn("Hello world 3.");
logger.warn("Hello world 3", e);
-
-
+
logger.error("Hello world 4.");
- logger.error("Hello world {}", new Integer(3));
+ logger.error("Hello world {}", new Integer(3));
logger.error("Hello world 4.", e);
}
-
+
+
+ @Test
public void testNull() {
Logger logger = LoggerFactory.getLogger("testNull");
logger.debug(null);
logger.info(null);
logger.warn(null);
logger.error(null);
-
+
Exception e = new Exception("This is a test exception.");
logger.debug(null, e);
logger.info(null, e);
logger.warn(null, e);
logger.error(null, e);
}
-
+
+
+ @Test
public void testMarker() {
Logger logger = LoggerFactory.getLogger("testMarker");
Marker blue = MarkerFactory.getMarker("BLUE");
@@ -106,7 +135,7 @@
logger.info(blue, "hello");
logger.warn(blue, "hello");
logger.error(blue, "hello");
-
+
logger.debug(blue, "hello {}", "world");
logger.info(blue, "hello {}", "world");
logger.warn(blue, "hello {}", "world");
@@ -117,7 +146,9 @@
logger.warn(blue, "hello {} and {} ", "world", "universe");
logger.error(blue, "hello {} and {} ", "world", "universe");
}
-
+
+
+ @Test
public void testMDC() {
MDC.put("k", "v");
assertNotNull(MDC.get("k"));
@@ -137,4 +168,50 @@
} catch (IllegalArgumentException e) {
}
}
+
+ private void assertLogMessage(String expected, int index) {
+ LogRecord logRecord = listHandler.recordList.get(index);
+ Assert.assertNotNull(logRecord);
+ assertEquals(expected, logRecord.getMessage());
+ }
+
+ private void assertException(Class exceptionType, int index) {
+ LogRecord logRecord = listHandler.recordList.get(index);
+ Assert.assertNotNull(logRecord);
+ assertEquals(exceptionType, logRecord.getThrown().getClass());
+ }
+
+ private void removeAllHandlers(java.util.logging.Logger logger) {
+ Handler[] handlers = logger.getHandlers();
+ for (Handler h : handlers) {
+ logger.removeHandler(h);
+ }
+ }
+
+
+ void removeListHandlers(java.util.logging.Logger logger) {
+ Handler[] handlers = logger.getHandlers();
+ for (Handler h : handlers) {
+ if (h instanceof ListHandler)
+ logger.removeHandler(h);
+ }
+ }
+
+ static private class ListHandler extends java.util.logging.Handler {
+
+ List<LogRecord> recordList = new ArrayList<LogRecord>();
+
+ @Override
+ public void publish(LogRecord record) {
+ recordList.add(record);
+ }
+
+ @Override
+ public void flush() {
+ }
+
+ @Override
+ public void close() throws SecurityException {
+ }
+ }
}
diff --git a/slf4j-site/src/site/pages/news.html b/slf4j-site/src/site/pages/news.html
index 4cdb647..e41d7d4 100755
--- a/slf4j-site/src/site/pages/news.html
+++ b/slf4j-site/src/site/pages/news.html
@@ -29,6 +29,19 @@
<hr noshade="noshade" size="1"/>
+ <h3>, 2014 - Release of SLF4J 1.7.8 </h3>
+
+ <p>Added <code>MDC.putCloeable</code> method so that it can be used
+ as a <a
+ href="https://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html">closeable
+ resource</a> under Java 7.</p>
+
+ <p>Added <code>getContext</code> method returning a hashtable in
+ org.apache.log4j.MDC in the log4j-over-slf4j module.
+ </p>
+
+ <hr noshade="noshade" size="1"/>
+
<h3>4th of April, 2014 - Release of SLF4J 1.7.7 </h3>
<p>SFL4J API now uses generics. This enhancement was contributed by