@Override
  public Logger getLogger(String name) {
    return _loggers.computeIfAbsent(name, _loggerFactory::getLogger);
  }
@Test
  public void testCaching() throws Exception {
    CountingLoggerFactory loggerFactory = new CountingLoggerFactory();
    final ILoggerFactory cachedFactory = new CachedLoggerFactory(loggerFactory);

    ExecutorService executorService = Executors.newFixedThreadPool(5);
    CountDownLatch startRace = new CountDownLatch(1);
    CountDownLatch stopRace = new CountDownLatch(5);
    for (int i = 0; i < 5; i++) {
      executorService.submit(() -> {
        try {
          startRace.await();
          cachedFactory.getLogger("com.linkedin.parseq.Task");
          stopRace.countDown();
        } catch (Exception e) {
          Assert.fail();
        }
      } );
    }
    // start race
    startRace.countDown();
    assertTrue(stopRace.await(5000, TimeUnit.MILLISECONDS));
    Assert.assertEquals(loggerFactory.getCount(), 1);
  }