package ru.kirillius.XCP.Logging; import lombok.Getter; import ru.kirillius.XCP.Commons.Context; import ru.kirillius.java.utils.events.ConcurrentEventHandler; import ru.kirillius.java.utils.events.EventHandler; import java.util.Arrays; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; public class LoggingSystemImpl implements LoggingSystem { private final java.util.logging.Logger rootLogger; private final Handler handler; @Override public Logger createLogger(Class cls) { var logger = new LoggerImpl(cls.getSimpleName()); LogManager.getLogManager().addLogger(logger); return logger; } @Override public Logger createLogger(String name) { var logger = new LoggerImpl(name); LogManager.getLogManager().addLogger(logger); return logger; } public LoggingSystemImpl(Context context) { eventHandler = new ConcurrentEventHandler<>(); var logManager = LogManager.getLogManager(); rootLogger = logManager.getLogger(""); rootLogger.setLevel(Level.INFO); handler = new LogHandlerImpl(this, context); Arrays.stream(rootLogger.getHandlers()).forEach(rootLogger::removeHandler); rootLogger.addHandler(handler); } @Getter private final EventHandler eventHandler; @Override public void close() { if (handler != null) { rootLogger.removeHandler(handler); } } }