Hello,
I'm progamatically creating an appender with the following code:
private static final String PATTERN_LAYOUT = "%-5p %d [%t] %c: %m%n";
private RollingFileAppender createRollingFileAppender(String logFilePath,
String filePattern, String appenderName, Configuration configuration)
{
TriggeringPolicy triggeringPolicy =
TimeBasedTriggeringPolicy.createPolicy("1", "true");
RolloverStrategy rolloverStrategy =
DefaultRolloverStrategy.createStrategy("30", "1", null,
String.valueOf(Deflater.NO_COMPRESSION), configuration);
return RollingFileAppender.createAppender(logFilePath,
logFilePath + filePattern,
"true",
appenderName,
"true",
null, null,
triggeringPolicy,
rolloverStrategy,
createLayout(configuration),
null, null, null, null,
configuration);
}
private Layout<? extends Serializable> createLayout(Configuration
configuration)
{
return PatternLayout.createLayout(PATTERN_LAYOUT, configuration, null,
null, true, false, null, null);
}
Sometimes, not always, when an exception is thrown I end up seeing the
following error:
2014-12-02 14:36:52,092 ERROR An exception occurred processing Appender
defaultFileAppender java.lang.ArrayIndexOutOfBoundsException: 53
at
org.apache.logging.log4j.core.impl.ThrowableProxy.formatElements(ThrowableProxy.java:227)
at
org.apache.logging.log4j.core.impl.ThrowableProxy.getExtendedStackTraceAsString(ThrowableProxy.java:401)
at
org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter.format(ExtendedThrowablePatternConverter.java:72)
at
org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:36)
at
org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:189)
at
org.apache.logging.log4j.core.layout.PatternLayout.toSerializable(PatternLayout.java:53)
at
org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(AbstractStringLayout.java:52)
at
org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:104)
at
org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:86)
at
org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
at
org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:428)
at
org.apache.logging.log4j.core.async.AsyncLoggerConfig.asyncCallAppenders(AsyncLoggerConfig.java:118)
at
org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigHelper.java:222)
at
org.apache.logging.log4j.core.async.AsyncLoggerConfigHelper$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigHelper.java:207)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
I noticed that it doesn't happen for every exception, but when it does
happen, it happens consistently. I also noticed that it's the causedTrace
array the one that usually falls short. Is this a known issue? Any way I
can get a fix? Maybe with a different layout? I'm using log4j 2.0.2
Thanks you!