[ https://issues.apache.org/jira/browse/LOG4J2-1988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16168059#comment-16168059 ]
Remko Popma edited comment on LOG4J2-1988 at 9/15/17 3:52 PM: -------------------------------------------------------------- Fixed in master. I was able to add a test that reproduces the issue, and with the fix the exception no longer occurs. Please verify and close. was (Author: rem...@yahoo.com): Fixed in master. I was able to add a test that reproduces the issue, and with the fix the exception no longer occurs. > java.util.ConcurrentModificationException with AsyncLogger? > ----------------------------------------------------------- > > Key: LOG4J2-1988 > URL: https://issues.apache.org/jira/browse/LOG4J2-1988 > Project: Log4j 2 > Issue Type: Question > Components: Layouts > Affects Versions: 2.8.2 > Environment: Java 1.8.0_111, Linux > Reporter: Corneliu C > Assignee: Remko Popma > Fix For: 2.9.1 > > > Hi, > I see java.util.ConcurrentModificationException even with AsyncLogger and I > don't know if it's something I can configure to get rid of these exceptions. > The application uses Apache Camel framework and there is a mixture of Async > Appender and Async Logger defined. > I don't see many of these but they happen from time to time; they are printed > in the Console appender. > * Stacktrace: > {code} > 2017-07-19 11:53:56,024 Log4j2-TF-11-AsyncLoggerConfig-4 ERROR An exception > occurred processing Appender ApacheCamel > java.util.ConcurrentModificationException > at java.util.LinkedHashMap$LinkedHashIterator.nextNode(Unknown Source) > at java.util.LinkedHashMap$LinkedEntryIterator.next(Unknown Source) > at java.util.LinkedHashMap$LinkedEntryIterator.next(Unknown Source) > at > org.apache.logging.log4j.message.ParameterFormatter.appendMap(ParameterFormatter.java:569) > at > org.apache.logging.log4j.message.ParameterFormatter.appendPotentiallyRecursiveValue(ParameterFormatter.java:505) > at > org.apache.logging.log4j.message.ParameterFormatter.recursiveDeepToString(ParameterFormatter.java:432) > at > org.apache.logging.log4j.message.ParameterFormatter.formatMessage2(ParameterFormatter.java:189) > at > org.apache.logging.log4j.message.ParameterizedMessage.formatTo(ParameterizedMessage.java:225) > at > org.apache.logging.log4j.core.pattern.MessagePatternConverter.format(MessagePatternConverter.java:119) > at > org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:38) > at > org.apache.logging.log4j.core.layout.PatternLayout$PatternSerializer.toSerializable(PatternLayout.java:333) > at > org.apache.logging.log4j.core.layout.PatternLayout.toText(PatternLayout.java:232) > at > org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:217) > at > org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:57) > at > org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:177) > at > org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:170) > at > org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:161) > at > org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.append(RollingRandomAccessFileAppender.java:218) > at > org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156) > at > org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129) > at > org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120) > at > org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84) > at > org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:448) > at > org.apache.logging.log4j.core.async.AsyncLoggerConfig.asyncCallAppenders(AsyncLoggerConfig.java:115) > at > org.apache.logging.log4j.core.async.AsyncLoggerConfigDisruptor$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigDisruptor.java:112) > at > org.apache.logging.log4j.core.async.AsyncLoggerConfigDisruptor$Log4jEventWrapperHandler.onEvent(AsyncLoggerConfigDisruptor.java:98) > at > com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:129) > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > {code} > * Log4j.xml configuration: > {code} > <?xml version="1.0" encoding="UTF-8"?> > <Configuration status="TRACE" name="Test" packages="" > monitorInterval="10" dest="log4j2-console.log" verbose="false"> > <Properties> > <Property name="instanceName">${hostName}-app</Property> > </Properties> > <Appenders> > ... > <Appenders> > <AlertAppender name="Alert" /> > <EventAppender name="Event" /> > <Console name="Console" target="SYSTEM_OUT"> > <PatternLayout pattern="%d{COMPACT}{UTC} %-5p %t > %C{1}:%l [%X{camel.breadcrumbId}] %m{nolookups}%n%ex{full}" /> > </Console> > ... > <RollingRandomAccessFile name="ApacheCamel" > fileName="${instanceName}-apache-camel.log" > filePattern="${instanceName}-apache-camel.log.%d{yyMMdd}-%i" > immediateFlush="false"> > <PatternLayout> > <Pattern>%d{COMPACT}{UTC} %-5p %t %c{1} > [%X{camel.breadcrumbId}] %m{nolookups}%n%ex{full}</Pattern> > </PatternLayout> > <Policies> > <TimeBasedTriggeringPolicy interval="1" > modulate="true" /> > <SizeBasedTriggeringPolicy size="100 MB" /> > </Policies> > <DefaultRolloverStrategy max="20"/> > </RollingRandomAccessFile> > ... > <Loggers> > <AsyncLogger name="org.apache.camel" level="TRACE" > additivity="false" > includeLocation="false"> > <AppenderRef ref="ApacheCamel" /> > </AsyncLogger> > ... > <Root level="INFO" includeLocation="false"> > <AppenderRef ref="Async" /> > </Root> > </Loggers> > </Configuration> > {code} > As environment parameters these are configured: > {code} > -Dlog4j2.disable.jmx=true -Dlog4j2.enable.threadlocals=true > -Dlog4j2.enable.direct.encoders=true > -Dlog4j2.garbagefree.threadContextMap=true > -DAsyncLoggerConfig.RingBufferSize=10240 > {code} > Following libs are in classpath: > disruptor-3.3.6.jar > log4j-api-2.8.2.jar > log4j-core-2.8.2.jar > log4j-jul-2.1.jar > log4j-slf4j-impl-2.8.2.jar > log4j-web-2.8.2.jar > slf4j-api-1.7.21.jar > Thank you -- This message was sent by Atlassian JIRA (v6.4.14#64029)