You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Ralph Goers (JIRA)" <ji...@apache.org> on 2013/03/15 17:48:12 UTC

[jira] [Commented] (LOG4J2-176) IllegalArgumentException during AsyncAppender shutdown

    [ 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: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org