Author: ceki Date: Tue May 27 22:49:17 2008 New Revision: 1019 Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/Logger.java slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/MessageFormatter.java slf4j/trunk/slf4j-api/src/test/java/org/slf4j/helpers/MessageFormatterTest.java slf4j/trunk/slf4j-log4j12/src/test/java/org/slf4j/InvocationTest.java slf4j/trunk/slf4j-site/src/site/pages/news.html
Log: - fixed bug 78. If the argument array passed to a Logger printing method (debug, info, etc.) was null, a NullPointerException was thrown. With the correction, the messagePattern is returned as is, without parameter substitution. - updated javadocs Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/Logger.java ============================================================================== --- slf4j/trunk/slf4j-api/src/main/java/org/slf4j/Logger.java (original) +++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/Logger.java Tue May 27 22:49:17 2008 @@ -26,8 +26,9 @@ package org.slf4j; /** - * The main user interface to logging. It is expected that logging - * takes place through concrete implementations of this interface. + * The org.slf4j.Logger interface is the main user entry point of SLF4J API. + * It is expected that logging takes place through concrete implementations + * of this interface. * * <h3>Typical usage pattern:</h3> * <pre> Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/MessageFormatter.java ============================================================================== --- slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/MessageFormatter.java (original) +++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/MessageFormatter.java Tue May 27 22:49:17 2008 @@ -131,6 +131,10 @@ int len = messagePattern.length(); int j = messagePattern.indexOf(DELIM_START); + if(argArray == null) { + return messagePattern; + } + StringBuffer sbuf = new StringBuffer(messagePattern.length() + 50); for (int L = 0; L < argArray.length; L++) { @@ -175,7 +179,7 @@ } } } - // append the characters following the second {} pair. + // append the characters following the last {} pair. sbuf.append(messagePattern.substring(i, messagePattern.length())); return sbuf.toString(); } Modified: slf4j/trunk/slf4j-api/src/test/java/org/slf4j/helpers/MessageFormatterTest.java ============================================================================== --- slf4j/trunk/slf4j-api/src/test/java/org/slf4j/helpers/MessageFormatterTest.java (original) +++ slf4j/trunk/slf4j-api/src/test/java/org/slf4j/helpers/MessageFormatterTest.java Tue May 27 22:49:17 2008 @@ -151,6 +151,28 @@ assertEquals("Value {} is smaller than 1", result); } + public void testNullArray() { + String result; + + String msg0 = "msg0"; + String msg1 = "msg1 {}"; + String msg2 = "msg2 {} {}"; + String msg3 = "msg3 {} {} {}"; + + Object[] args = null; + + result = MessageFormatter.arrayFormat(msg0, args); + assertEquals(msg0, result); + + result = MessageFormatter.arrayFormat(msg1, args); + assertEquals(msg1, result); + + result = MessageFormatter.arrayFormat(msg2, args); + assertEquals(msg2, result); + + result = MessageFormatter.arrayFormat(msg3, args); + assertEquals(msg3, result); + } public void testArray() { String result; Modified: slf4j/trunk/slf4j-log4j12/src/test/java/org/slf4j/InvocationTest.java ============================================================================== --- slf4j/trunk/slf4j-log4j12/src/test/java/org/slf4j/InvocationTest.java (original) +++ slf4j/trunk/slf4j-log4j12/src/test/java/org/slf4j/InvocationTest.java Tue May 27 22:49:17 2008 @@ -33,6 +33,8 @@ package org.slf4j; +import org.apache.log4j.spi.LoggingEvent; + import junit.framework.TestCase; /** @@ -108,7 +110,19 @@ logger.error(null, e); assertEquals(8, listAppender.list.size()); } - + + // http://bugzilla.slf4j.org/show_bug.cgi?id=78 + public void testNullParameter_BUG78() { + Logger logger = LoggerFactory.getLogger("testNullParameter_BUG78"); + String[] parameters = null; + String msg = "hello {}"; + + logger.debug(msg, parameters); + assertEquals(1, listAppender.list.size()); + LoggingEvent e = (LoggingEvent) listAppender.list.get(0); + assertEquals(msg, e.getMessage()); + } + public void testMarker() { Logger logger = LoggerFactory.getLogger("testMarker"); Marker blue = MarkerFactory.getMarker("BLUE"); Modified: slf4j/trunk/slf4j-site/src/site/pages/news.html ============================================================================== --- slf4j/trunk/slf4j-site/src/site/pages/news.html (original) +++ slf4j/trunk/slf4j-site/src/site/pages/news.html Tue May 27 22:49:17 2008 @@ -42,6 +42,15 @@ </p> + <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=78">bug + 78</a> reported by Venu Thachappilly. If the argument array passed + to a Logger printing method (debug, info, etc.) was null, a + <code>NullPointerException</code> was thrown. With the correction, + the messagePattern is returned as is, without parameter + substitution. + </p> + + <p>Added the <code>getCopyOfContextMap</code> method to the <code>MDCAdapter</code> and <code>org.sf4j.MDC</code> classes. This was requested in <a _______________________________________________ dev mailing list dev@slf4j.org http://www.slf4j.org/mailman/listinfo/dev