public void append(final LoggingEvent event) {
    //
    //   if dispatcher thread has died then
    //      append subsequent events synchronously
    //   See bug 23021
    if (!dispatcher.isAlive() || (bufferSize <= 0)) {
      appenders.appendLoopOnAppenders(event);

      return;
    }

    // Set the NDC and thread name for the calling thread as these
    // LoggingEvent fields were not set at event creation time.
    event.getNDC();
    event.getThreadName();
    // Get a copy of this thread's MDC.
    event.getMDCCopy();
    if (locationInfo) {
      event.getLocationInformation();
    }
    event.getRenderedMessage();
    event.getThrowableStrRep();

    synchronized (buffer) {
      while (true) {
        int previousSize = buffer.size();

        if (previousSize < bufferSize) {
          buffer.add(event);

          //
          //   if buffer had been empty
          //       signal all threads waiting on buffer
          //       to check their conditions.
          //
          if (previousSize == 0) {
            buffer.notifyAll();
          }

          break;
        }

        //
        //   Following code is only reachable if buffer is full
        //
        //
        //   if blocking and thread is not already interrupted
        //      and not the dispatcher then
        //      wait for a buffer notification
        boolean discard = true;
        if (blocking
                && !Thread.interrupted()
                && Thread.currentThread() != dispatcher) {
          try {
            buffer.wait();
            discard = false;
          } catch (InterruptedException e) {
            //
            //  reset interrupt status so
            //    calling code can see interrupt on
            //    their next wait or sleep.
            Thread.currentThread().interrupt();
          }
        }

        //
        //   if blocking is false or thread has been interrupted
        //   add event to discard map.
        //
        if (discard) {
          String loggerName = event.getLoggerName();
          DiscardSummary summary = (DiscardSummary) discardMap.get(loggerName);

          if (summary == null) {
            summary = new DiscardSummary(event);
            discardMap.put(loggerName, summary);
          } else {
            summary.add(event);
          }

          break;
        }
      }
    }
  }
public void append ( final LoggingEvent event ) { if ( ! dispatcher . isAlive ( ) || ( bufferSize <= 0 ) ) { appenders . appendLoopOnAppenders ( event ) ; return ; } event . getNDC ( ) ; event . getThreadName ( ) ; event . getMDCCopy ( ) ; if ( locationInfo ) { event . getLocationInformation ( ) ; } event . getRenderedMessage ( ) ; event . getThrowableStrRep ( ) ; synchronized ( buffer ) { while ( true ) { int previousSize = buffer . size ( ) ; if ( previousSize < bufferSize ) { buffer . add ( event ) ; if ( previousSize == 0 ) { buffer . notifyAll ( ) ; } break ; } boolean discard = true ; if ( blocking && ! Thread . interrupted ( ) && Thread . currentThread ( ) != dispatcher ) { try { buffer . wait ( ) ; discard = false ; } catch ( InterruptedException e ) { Thread . currentThread ( ) . interrupt ( ) ; } } if ( discard ) { String loggerName = event . getLoggerName ( ) ; DiscardSummary summary = ( DiscardSummary ) discardMap . get ( loggerName ) ; if ( summary == null ) { summary = new DiscardSummary ( event ) ; discardMap . put ( loggerName , summary ) ; } else { summary . add ( event ) ; } break ; } } } }
{@inheritDoc}