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

Reply via email to