@Override public Logger create(Class<?> binding) { requireNonNull(binding); return acquireLogger(makeNameFrom(binding)); }
@Override public synchronized void setFormatter(LoggerFormatter formatter) { this.formatter = Objects.requireNonNull(formatter); forEachLogger(l -> l.setFormatter(formatter)); }
private void forEachLogger(Consumer<Logger> consumer) { requireNonNull(consumer); loggers().map(Entry::getValue).forEach(consumer); }
@Override public void setLevel(Class<?> binding, Level level) { requireNonNulls(binding, level); setLevel(makeNameFrom(binding), level); }
protected Logger acquireLogger(String binding) { requireNonNull(binding); return loggers.computeIfAbsent(binding, b -> { final Logger log = make(b, formatter); listeners.forEach(log::addListener); return log; }); }
@Override public Logger create(String binding) { requireNonNull(binding); return acquireLogger(binding); }
@Override public void setLevel(Class<?> binding, Level level) { requireNonNulls(binding, level); setLevel(makeNameFrom(binding), level); }
protected Logger acquireLogger(String binding) { requireNonNull(binding); return loggers.computeIfAbsent(binding, b -> { final Logger log = make(b, formatter); listeners.forEach(log::addListener); return log; }); }
@Override public Logger create(String binding) { requireNonNull(binding); return acquireLogger(binding); }
@Override public Logger create(Class<?> binding) { requireNonNull(binding); return acquireLogger(makeNameFrom(binding)); }
@Override public void addListener(LoggerEventListener listener) { requireNonNull(listener); if (listeners.add(listener)) { forEachLogger(l -> l.addListener(listener)); } }
@Override public void setLevel(String path, Level level) { requireNonNulls(path, level); loggers() .filter(e -> e.getKey().startsWith(path) ) .map(Entry::getValue).forEach((Logger l) -> l.setLevel(level) ); }
@Override public void removeListener(LoggerEventListener listener) { requireNonNull(listener); if (listeners.remove(listener)) { forEachLogger(l -> l.removeListener(listener)); } }
private void forEachLogger(Consumer<Logger> consumer) { requireNonNull(consumer); loggers().map(Entry::getValue).forEach(consumer); }
@Override public synchronized void setFormatter(LoggerFormatter formatter) { this.formatter = Objects.requireNonNull(formatter); forEachLogger(l -> l.setFormatter(formatter)); }
@Override public void setLevel(String path, Level level) { requireNonNulls(path, level); loggers() .filter(e -> e.getKey().startsWith(path) ) .map(Entry::getValue).forEach((Logger l) -> l.setLevel(level) ); }
@Override public void removeListener(LoggerEventListener listener) { requireNonNull(listener); if (listeners.remove(listener)) { forEachLogger(l -> l.removeListener(listener)); } }
@Override public void addListener(LoggerEventListener listener) { requireNonNull(listener); if (listeners.add(listener)) { forEachLogger(l -> l.addListener(listener)); } }