Buggy code:
public class ChainsawAppenderHandler extends AppenderSkeleton { private static final String DEFAULT_IDENTIFIER = "Unknown" ; private ChainsawAppenderHandler . WorkQueue worker ; private final Object mutex = new Object ( ) ; private int sleepInterval = 1000 ; private EventListenerList listenerList = new EventListenerList ( ) ; private double dataRate = 0.0 ; private String identifierExpression ; private final LoggingEventFieldResolver resolver = LoggingEventFieldResolver . getInstance ( ) ; private PropertyChangeSupport propertySupport = new PropertyChangeSupport ( this ) ; private Map customExpressionRules = new HashMap ( ) ; public ChainsawAppenderHandler ( ChainsawAppender appender ) { } public ChainsawAppenderHandler ( ) { } public void setIdentifierExpression ( String identifierExpression ) { } public String getIdentifierExpression ( ) { } public void addCustomEventBatchListener ( String identifier , EventBatchListener l ) throws IllegalArgumentException { } public void addEventBatchListener ( EventBatchListener l ) { } public void removeEventBatchListener ( EventBatchListener l ) { } public void append ( LoggingEvent event ) { } public void appendBatch ( Collection events ) { } public void close ( ) { } public void activateOptions ( ) { } public boolean requiresLayout ( ) { } public int getQueueInterval ( ) { } public void setQueueInterval ( int interval ) { } String getTabIdentifier ( LoggingEvent e ) { } public static void main ( String [ ] args ) throws InterruptedException { ChainsawAppenderHandler handler = new ChainsawAppenderHandler ( ) ; handler . addEventBatchListener ( new EventBatchListener ( ) { public String getInterestedIdentifier ( ) { return null ; } public void receiveEventBatch ( String identifier , List eventBatchEntrys ) { LogLog . debug ( ( ( ( "received<seq2seq4repair_space>batch<seq2seq4repair_space>for<seq2seq4repair_space>'" + identifier ) + "',<seq2seq4repair_space>list.size()=" ) + ( eventBatchEntrys . size ( ) ) ) ) ; LogLog . debug ( eventBatchEntrys . toString ( ) ) ; } } ) ; LogManager . getRootLogger ( ) . addAppender ( handler ) ; SocketReceiver receiver = new SocketReceiver ( 4445 ) ; <START_BUG> PluginRegistry . startPlugin ( receiver ) ; <END_BUG> Thread . sleep ( 60000 ) ; } public double getDataRate ( ) { } void setDataRate ( double dataRate ) { } public synchronized void addPropertyChangeListener ( PropertyChangeListener listener ) { } public synchronized void addPropertyChangeListener ( String propertyName , PropertyChangeListener listener ) { } public synchronized void removePropertyChangeListener ( PropertyChangeListener listener ) { } public synchronized void removePropertyChangeListener ( String propertyName , PropertyChangeListener listener ) { } class WorkQueue { final ArrayList queue = new ArrayList ( ) ; Thread workerThread ; protected WorkQueue ( ) { } public final void enqueue ( LoggingEvent event ) { } public final void stop ( ) { } private class WorkerThread extends Thread { public WorkerThread ( ) { } public void run ( ) { } private void dispatchEventBatch ( ChainsawEventBatch eventBatch ) { } } } }

Fix:
LogManager . getLoggerRepository ( ) . getPluginRegistry ( ) . startPlugin ( receiver ) ;