SystemLoggerQueueJULHandler.java
package io.jstach.rainbowgum.jul;
import java.util.logging.Handler;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import org.jspecify.annotations.Nullable;
/**
* JUL logger that uses global router.
*/
final class SystemLoggerQueueJULHandler extends Handler {
/**
* Do nothing constuctor
*/
public SystemLoggerQueueJULHandler() {
}
@Override
public void publish(@Nullable LogRecord rec) {
JULBridge.publish(rec);
}
@Override
public void flush() {
}
@Override
public void close() {
}
/**
* Checks to see if this handler is installed
* @return true if it is.
*/
public static boolean isInstalled() {
java.util.logging.Logger rootLogger = getRootLogger();
Handler[] handlers = rootLogger.getHandlers();
for (Handler handler : handlers) {
if (handler instanceof SystemLoggerQueueJULHandler) {
return true;
}
}
return false;
}
/**
* Call to remove all handlers.
*/
public static void removeHandlersForRootLogger() {
java.util.logging.Logger rootLogger = getRootLogger();
java.util.logging.Handler[] handlers = rootLogger.getHandlers();
for (Handler handler : handlers) {
rootLogger.removeHandler(handler);
}
}
private static java.util.logging.Logger getRootLogger() {
var logger = LogManager.getLogManager().getLogger("");
if (logger == null) {
throw new IllegalStateException("log manager return null for root logger");
}
return logger;
}
/**
* Installs.
*/
public static void install() {
removeHandlersForRootLogger();
getRootLogger().addHandler(new SystemLoggerQueueJULHandler());
}
}