x-control-panel/logging/src/main/java/ru/kirillius/XCP/Logging/LoggingSystemImpl.java

51 lines
1.5 KiB
Java

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<LogMessage> eventHandler;
@Override
public void close() {
if (handler != null) {
rootLogger.removeHandler(handler);
}
}
}