[ 
https://issues.apache.org/jira/browse/LOG4J2-1988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16104216#comment-16104216
 ] 

Ralph Goers edited comment on LOG4J2-1988 at 7/28/17 12:46 AM:
---------------------------------------------------------------

The AppenderControl should be catching these and then only propagating it to 
the user if it is configured to do so. The exception is probably being logged 
just so the user knows they have a problem. You could certainly catch the 
ConcurrentModificationException there and provide a better message but I am 
sure there are other reasons that could occur in an appender so it might be 
misleading to do that.

Somehow we need to provide users with the information on what they need to look 
at when this happens.

As Remko noted, this shouldn't be happening though since we shouldn't be 
dealing with the real object. It would be useful to know what was being logged 
when this happens.


was (Author: [email protected]):
The AppenderControl should be catching these and then only propagating it to 
the user if it is configured to do so. The exception is probably being logged 
just so the user knows they have a problem. You could certainly catch the 
ConcurrentModificationException there and provide a better message but I am 
sure there are other reasons that could occur in an appender so it might be 
misleading to do that.

Somehow we need to provide users with the information on what they need to look 
at when this happens.

> 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
>            Priority: Minor
>
> 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)

Reply via email to