AbstractLoggerFactory implements LoggerFactory { @Override public void removeListener(LoggerEventListener listener) { requireNonNull(listener); if (listeners.remove(listener)) { forEachLogger(l -> l.removeListener(listener)); } } AbstractLoggerFactory(); @Override Logger create(Class<?> binding); @Override Logger create(String binding); @Override synchronized void setFormatter(LoggerFormatter formatter); @Override synchronized LoggerFormatter getFormatter(); abstract Logger make(String binding, LoggerFormatter formatter); @Override void addListener(LoggerEventListener listener); @Override void removeListener(LoggerEventListener listener); @Override Stream<LoggerEventListener> listeners(); @Override Stream<Entry<String, Logger>> loggers(); @Override void setLevel(String path, Level level); @Override void setLevel(Class<?> binding, Level level);  }
@Test void removeListener() { instance.addListener(loggerEventListener); instance.removeListener(loggerEventListener); final Logger logger = instance.create(AbstractLoggerFactory.class); logger.fatal("A"); assertNull(loggerEvent); }