[
https://issues.apache.org/jira/browse/LOG4J2-176?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13603553#comment-13603553
]
Remko Popma commented on LOG4J2-176:
------------------------------------
We could move this appender.
About the lmax disruptor technology: I started doing some performance tests and
AsyncAppender actually does quite well in multi-threaded scenarios with 4+
threads. In single-threaded scenarios disruptor is much faster though. Still
investigating.
The one thing these tests make very clear is what a huge difference location
makes (LOG4J2-153).
Excluding location is up to 35 x (!) faster with 1 thread, and still 2 x faster
with 8 threads.
> IllegalArgumentException during AsyncAppender shutdown
> ------------------------------------------------------
>
> Key: LOG4J2-176
> URL: https://issues.apache.org/jira/browse/LOG4J2-176
> Project: Log4j 2
> Issue Type: Bug
> Components: Core
> Affects Versions: 2.0-beta4
> Environment: Windows 2000, JDK1.6.0_031, single-cpu machine, multiple
> threads calling Logger.log
> Reporter: Remko Popma
> Priority: Minor
>
> I am seeing the following exception:
> Exception in thread "Thread-7" java.lang.IllegalArgumentException: Event is
> not a serialized LogEvent: Shutdown
> at
> org.apache.logging.log4j.core.impl.Log4jLogEvent.deserialize(Log4jLogEvent.java:303)
> at
> org.apache.logging.log4j.core.appender.AsynchAppender$AsynchThread.run(AsynchAppender.java:229)
> (I cannot reproduce this on other platforms)
> I think this is what is happening:
> [AppThread] calls ((LifeCycle) LogManager.getContext()).stop();
> [AppThread] sets AsyncAppender.shutdown field to true (line 240)
> [AsyncThread] breaks out of while(!shutdown) loop (line 196)
> [AppThread] adds String "Shutdown" to queue
> [AsyncThread] processes remaining items in the queue, tries to deserialize
> String "Shutdown" -> Error
> Solution:
> replace AsyncAppender line 229:
> final Log4jLogEvent event = Log4jLogEvent.deserialize(queue.take());
> with
> Serializable s = queue.take();
> if (SHUTDOWN.equals(s)) { continue; } // or break?
> final Log4jLogEvent event = Log4jLogEvent.deserialize(s);
> ....
> I don't think this is a major issue as the AsyncThread will exit its run()
> method (so JVM can exit), it just looks a bit sloppy.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]