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 Mariano Gonzalez <ma...@gmail.com> on 2014/12/19 14:01:16 UTC

Race condition stopping context

Hello,

I have an application in which I'm using all async loggers. When I stop the
LoggerContext, there're still some events waiting in disruptor's buffer and
when it tries to execute them the context is already closed and thus those
events are lost.

Is there some kind of hook, callback or whatever I can use so that when the
context is stopped:


   - the loggers stop accepting new messages
   - the context waits for disruptor's buffer to be empty before actually
   stopping


Thanks

Re: Race condition stopping context

Posted by Mariano Gonzalez <ma...@gmail.com>.
Hello,

I've been taking a look at LoggerContext#stop() and for what I see there's
code to prevent disruptor to take new messages but there's nothing making
sure that the ring buffer is empty before actually closing up.

I did a simple test with an Appender wrapper like this:

final class StopConditionSafeAppenderWrapper extends BaseAppenderWrapper
{
    private final LoggerContext loggerContext;

    StopConditionSafeAppenderWrapper(Appender delegate, LoggerContext
loggerContext)
    {
        super(delegate);
        this.loggerContext = loggerContext;
    }

    @Override
    public void append(LogEvent event)
    {
        if (!loggerContext.isStarted()) {
             return;
        }

        super.append(event);
    }
}

Using this appender wrapper I still get the same error, because at the time
that append was closed the context was started but by the time disruptor
processed it it was already stopped (this I could verify with a debugger).

Should I open a bug? Any workaround you could suggest?

Thanks!

Re: Race condition stopping context

Posted by Mariano Gonzalez <ma...@gmail.com>.
Hello Remko,

I'm using 2.1. Any pointers ?

On Fri, Dec 19, 2014 at 11:20 AM, Remko Popma <re...@gmail.com> wrote:
>
> We used to have this problem in older versions but these issues have been
> addressed in 2.1 as far as I know. Which version are you using?
>
> Sent from my iPhone
>
> > On 2014/12/19, at 22:01, Mariano Gonzalez <ma...@gmail.com>
> wrote:
> >
> > Hello,
> >
> > I have an application in which I'm using all async loggers. When I stop
> the
> > LoggerContext, there're still some events waiting in disruptor's buffer
> and
> > when it tries to execute them the context is already closed and thus
> those
> > events are lost.
> >
> > Is there some kind of hook, callback or whatever I can use so that when
> the
> > context is stopped:
> >
> >
> >   - the loggers stop accepting new messages
> >   - the context waits for disruptor's buffer to be empty before actually
> >   stopping
> >
> >
> > Thanks
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>

Re: Race condition stopping context

Posted by Remko Popma <re...@gmail.com>.
We used to have this problem in older versions but these issues have been addressed in 2.1 as far as I know. Which version are you using? 

Sent from my iPhone

> On 2014/12/19, at 22:01, Mariano Gonzalez <ma...@gmail.com> wrote:
> 
> Hello,
> 
> I have an application in which I'm using all async loggers. When I stop the
> LoggerContext, there're still some events waiting in disruptor's buffer and
> when it tries to execute them the context is already closed and thus those
> events are lost.
> 
> Is there some kind of hook, callback or whatever I can use so that when the
> context is stopped:
> 
> 
>   - the loggers stop accepting new messages
>   - the context waits for disruptor's buffer to be empty before actually
>   stopping
> 
> 
> Thanks

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