You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Ted Graham <tg...@ConcordEnergy.com> on 2008/01/25 15:55:36 UTC

Concurrency with separate logger and appender elements?

We are using log4j 1.2.14 as part of a financial trading system, where
latency is important.

 

If I have two threads logging to separate files via separate appenders, can
they execute concurrently.  If not, what is the point of contention, and how
serious is it?  

 

To explain in more detail, my config file has two <logger>s and two
<appender>s (both DailyRollingFileAppenders).  The code references one of
the loggers by name and logs to it from a dedicated thread.  There is
another thread that log to a variety of other loggers, which are handled by
a root level appender.  Will logging to one appender block another thread
from logging to a separate appender?

 

Thanks,

Ted


Re: Concurrency with separate logger and appender elements?

Posted by Curt Arnold <ca...@apache.org>.
On Jan 25, 2008, at 8:55 AM, Ted Graham wrote:

> We are using log4j 1.2.14 as part of a financial trading system, where
> latency is important.
>
>
>
> If I have two threads logging to separate files via separate  
> appenders, can
> they execute concurrently.  If not, what is the point of contention,  
> and how
> serious is it?
>
>
>
> To explain in more detail, my config file has two <logger>s and two
> <appender>s (both DailyRollingFileAppenders).  The code references  
> one of
> the loggers by name and logs to it from a dedicated thread.  There is
> another thread that log to a variety of other loggers, which are  
> handled by
> a root level appender.  Will logging to one appender block another  
> thread
> from logging to a separate appender?
>
>
>
> Thanks,
>
> Ted
>


Unfortunately, log4j 1.2 uses coarse grain synchronization since many  
internal classes are not thread-safe.  log4j 1.2 can evaluate many  
logging requests simultaneously to see if they satisfy the threshold,  
but only one logging request at a time can be in the code that  
dispatches to the appenders.  One of the big design criteria for the  
hypothetical log4j 2.0 is to replace that coarse grain synchronization  
with a much more modern design.

Wrapping the DRFA's in AsyncAppender's should substantially reduce the  
latency issue as long as the AsyncAppender does not block (if you set  
blocking to false, if the buffer overflows a summary of the missed  
logging statements is generated).  In that case, the other threads are  
blocked only for the time necessary to add the event to the  
AsyncAppender's queue, not the time necessary to perform the IO.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org