CollectedLoggerFactory.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package de.jplag.logger;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.concurrent.ConcurrentHashMap;
  5. import java.util.concurrent.ConcurrentMap;
  6. import org.slf4j.ILoggerFactory;
  7. import org.slf4j.Logger;
  8. /**
  9. * The factory for {@link CollectedLogger}.
  10. * @author Dominik Fuchss
  11. */
  12. public final class CollectedLoggerFactory implements ILoggerFactory {
  13. private final ConcurrentMap<String, CollectedLogger> loggerMap;
  14. public CollectedLoggerFactory() {
  15. loggerMap = new ConcurrentHashMap<>();
  16. }
  17. /**
  18. * Return an appropriate {@link CollectedLogger} instance by name.
  19. */
  20. public Logger getLogger(String name) {
  21. CollectedLogger simpleLogger = loggerMap.get(name);
  22. if (simpleLogger != null) {
  23. return simpleLogger;
  24. } else {
  25. CollectedLogger newInstance = new CollectedLogger(name);
  26. Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
  27. return oldInstance == null ? newInstance : oldInstance;
  28. }
  29. }
  30. /**
  31. * Print all errors of existing instances of {@link CollectedLogger}.
  32. */
  33. public void finalizeInstances() {
  34. List<CollectedLogger> copy = new ArrayList<>(loggerMap.values());
  35. copy.forEach(CollectedLogger::printAllErrorsForLogger);
  36. }
  37. }