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 > >