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

Ralph Goers commented on LOG4J2-176:
------------------------------------

Thanks for the report. I wish we could create a unit test to reproduce it but 
that would probably be difficult.

I have been meaning to ask you if this appender should move to the async 
project you created and could it leverage the technologies you are leveraing 
there?  This may be naive since I haven't had a chance to review that code yet.
                
> 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]

Reply via email to