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