private void flushAppender(AsyncAppenderBase<?> appender) throws InterruptedException { int timeWaiting = 0; while (timeWaiting < appender.getMaxFlushTime() && appender.getNumberOfElementsInQueue() > 0) { Thread.sleep(100); timeWaiting += 100; } if (appender.getNumberOfElementsInQueue() > 0) { // It may seem odd to log when we're trying to flush a logger that // isn't flushing, but the same warning is issued inside // appender.stop() if the appender isn't able to flush. appender.addWarn(appender.getNumberOfElementsInQueue() + " events may be discarded"); } }
@Override public int getQueueSize() { return asyncAppender.getNumberOfElementsInQueue(); }
public int getQueueSize() { return asyncAppender.getNumberOfElementsInQueue(); }
@SuppressWarnings("deprecation") @Test public void workerThreadFlushesOnStop() { int loopLen = 5; int maxRuntime = (loopLen + 1) * Math.max(1000, delayingListAppender.delay); ListAppender<Integer> la = delayingListAppender; asyncAppenderBase.addAppender(la); asyncAppenderBase.setDiscardingThreshold(0); asyncAppenderBase.setMaxFlushTime(maxRuntime); asyncAppenderBase.start(); asyncAppenderBase.worker.suspend(); for (int i = 0; i < loopLen; i++) { asyncAppenderBase.doAppend(i); } assertEquals(loopLen, asyncAppenderBase.getNumberOfElementsInQueue()); assertEquals(0, la.list.size()); asyncAppenderBase.worker.resume(); asyncAppenderBase.stop(); assertEquals(0, asyncAppenderBase.getNumberOfElementsInQueue()); verify(la, loopLen); }