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 Thomas Muller <tt...@online.no> on 2006/02/24 11:17:04 UTC
FW: AsyncAppender revisited (was: Possible deadlock using AsyncAppender)
Log4j Dev,
I've been encouraged to post this to the development list, so here it comes.
Any comments would be much appreciated.
Regards,
--
Thomas
| -----Original Message-----
| From: Jacob Kjome [mailto:hoju@visi.com]
| Sent: 24 February 2006 03:57
| To: Log4J Users List
| Subject: Re: AsyncAppender revisited (was: Possible deadlock
| using AsyncAppender)
|
|
| This seems like it would get more response on the developer list. I
| suggest you post it there.
|
| Jake
|
| At 09:48 AM 2/23/2006 +0000, you wrote:
| >Log4j gurus,
| >
| >I can now confirm that I have a Log4j configuration where
| the dispatching
| >thread (consumer) in an AsyncAppender sometimes becomes
| the same as the log
| >event producer thread. This actually happens to the
| appender associated with
| >the root logger, hence all threads wanting to log freeze
| when the buffer is
| >full (the dispatching thread waits for the buffer to have
| available space,
| >but it's only the dispatching thread that can pop from the
| event queue
| >freeing up space(!)).
| >
| >I consider this a bug/weekness in AsyncAppender; it should
| check that the
| >calling thread is different from the dispatcher thread
| before pushing the
| >LoggingEvent in the append() method.
| >
| >public void append( LoggingEvent event ) {
| > if( Thread.currentThread() == dispatcher ) {
| > LogLog.warn( "Can't append: appending thread same as
| >dispatcher ["
| > + Thread.currentThread().getName() + "]" );
| > return;
| > }
| > [...]
| >}
| >
| >I've written my own AsyncAppender doing the above and also
| refusing to log
| >if the buffer is more than 99% log and issue a warning if
| the buffer is more
| >than 95% full. Please find attached and use at your
| discretion. Thanks to
| >Elijah Baley [e_baley@hotmail.com] for ideas.
| >
| >I've also attached the log4j.xml used in a program where
| the said situation
| >arised - the root (async) appender's dispatcher became the
| same is the log
| >issues causeing all logging threads to hang.
| >
| >Swapping the native AsyncAppender with my own
| XAsyncAppender fixed all the
| >issues with our server.
| >
| >Any input/comments would be much appreciated.
| >
| >--
| >
| >Thomas
| >
| >
| >
|
| >------------------------------------------------------------
| ---------
| >To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
| >For additional commands, e-mail: log4j-user-help@logging.apache.org
|
|
| ---------------------------------------------------------------------
| To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
| For additional commands, e-mail: log4j-user-help@logging.apache.org
|
|
|
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org