That sounds reasonable. Ralph
On Sep 2, 2014, at 9:41 AM, Yogesh Rao <yog...@gmail.com> wrote: > Hi Ralph, > > IMO new Object[0] as a param value is valid and should behave similar to a > call to the method without param i.e. logger.error("Hello World {} in {} "); > > In the above context adding a conditional check params.length > 0 with then > the "if" @ line 157 wouldn't end up throwing the error and print the given > message > > Regards, > -Yogesh > > > On Tue, Sep 2, 2014 at 9:45 PM, Ralph Goers <ralph.go...@dslextreme.com> > wrote: > >> What will you do instead of throwing an ArrayIndexOutOfBoundsException? >> This is obviously a user error. It would be misleading (but maybe >> acceptable) to substitute “null” for the placeholders, but just throwing a >> different exception probably isn’t worth the trouble. >> >> Ralph >> >> On Sep 2, 2014, at 7:24 AM, Yogesh Rao <yog...@gmail.com> wrote: >> >>> Hi, >>> >>> There seems to be an issue with SimpleLogger implementation provided by >>> log4j2. The issue seems to be in the new improved API supporting >>> placeholders and var args when called with an Object Array of size 0. >>> >>> for e.g logger.error("Hello World {} in {} " , new Object[0]); >>> >>> A statement above results in an error as shown below >>> >>> ERROR StatusLogger Unable to locate a logging implementation, using >>> SimpleLogger >>> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 >>> at >>> >> org.apache.logging.log4j.simple.SimpleLogger.logMessage(SimpleLogger.java:157) >>> at >>> >> org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1347) >>> at >>> >> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1312) >>> at >>> >> org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:539) >>> at TestError.main(TestError.java:21) >>> >>> >>> >>> I managed to look at the code as well and it looks like a condition to >>> check of the var arg param array size is missing in SimpleLogger >>> >>> 155 final Object[] params = msg.getParameters(); >>> 156 Throwable t; >>> 157 if (throwable == null && params != null && >>> params[params.length - 1] instanceof Throwable) { >>> 158 t = (Throwable) params[params.length - 1]; >>> 159 } else { >>> 160 t = throwable; >>> 161 } >>> 162 if (t != null) { >>> 163 sb.append(SPACE); >>> 164 final ByteArrayOutputStream baos = new >>> ByteArrayOutputStream(); >>> 165 t.printStackTrace(new PrintStream(baos)); >>> 166 sb.append(baos.toString()); >>> 167 } >>> 168 stream.println(sb.toString()); >>> >>> >>> I can raise a JIRA issue and provide a fix with failing unit testcase. >> Let >>> me know if i can proceed ahead on this. >>> >>> Details of the environment are :- >>> Version used >>> >>> 1. JDK - Oracle JDK version 1.7 >>> 2. Log4j2 API - 2.0.1 >>> >>> >>> To reproduce following java class can be used : >>> >>> TestError.java >>> ------------------------ >>> >>> import org.apache.logging.log4j.LogManager; >>> import org.apache.logging.log4j.Logger; >>> >>> >>> >>> public class TestError { >>> >>> private static final Logger logger = LogManager.getLogger("TestError"); >>> /** >>> * @param args >>> */ >>> public static void main(String[] args) { >>> Object[] arr = null; >>> logger.error("Hello World {} in {} " , new Object[0]); >>> >>> } >>> >>> } >>> >>> Jars in Classpath >>> -------------------------- >>> Log4j2 API - 2.0.1 >>> >>> >>> Regards, >>> -Yogesh >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >> For additional commands, e-mail: log4j-user-h...@logging.apache.org >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org