Adapt logger if j.u.l already initialized
This commit is contained in:
parent
6a513232e5
commit
74ac54c4e4
|
@ -24,4 +24,12 @@ public class ArclightPluginLogger extends PluginLogger {
|
|||
public void log(LogRecord logRecord) {
|
||||
logger.log(logRecord);
|
||||
}
|
||||
|
||||
public static Logger getLogger(String name) {
|
||||
return JUL_MANAGER.getLogger(name);
|
||||
}
|
||||
|
||||
public static Logger getLogger(String name, String rb) {
|
||||
return JUL_MANAGER.getLogger(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import io.izzel.arclight.api.PluginPatcher;
|
|||
import io.izzel.arclight.api.Unsafe;
|
||||
import io.izzel.arclight.common.mod.util.log.ArclightI18nLogger;
|
||||
import io.izzel.arclight.common.mod.util.remapper.patcher.ArclightPluginPatcher;
|
||||
import io.izzel.arclight.common.mod.util.remapper.patcher.PluginLoggerTransformer;
|
||||
import io.izzel.arclight.common.mod.util.remapper.resource.RemapSourceHandler;
|
||||
import net.md_5.specialsource.InheritanceMap;
|
||||
import net.md_5.specialsource.JarMapping;
|
||||
|
@ -96,6 +97,9 @@ public class ArclightRemapper {
|
|||
this.transformerList.add(ArclightInterfaceInvokerGen.INSTANCE);
|
||||
this.transformerList.add(ArclightRedirectAdapter.INSTANCE);
|
||||
this.transformerList.add(ClassLoaderAdapter.INSTANCE);
|
||||
if (!(java.util.logging.LogManager.getLogManager() instanceof org.apache.logging.log4j.jul.LogManager)) {
|
||||
this.transformerList.add(new PluginLoggerTransformer());
|
||||
}
|
||||
this.patchers = ArclightPluginPatcher.load(this.transformerList);
|
||||
toBukkitMapping.setFallbackInheritanceProvider(GlobalClassRepo.inheritanceProvider());
|
||||
this.toBukkitRemapper = new LenientJarRemapper(toBukkitMapping);
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package io.izzel.arclight.common.mod.util.remapper.patcher;
|
||||
|
||||
import io.izzel.arclight.common.mod.util.log.ArclightPluginLogger;
|
||||
import io.izzel.arclight.common.mod.util.remapper.ClassLoaderRemapper;
|
||||
import io.izzel.arclight.common.mod.util.remapper.PluginTransformer;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.Type;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.MethodInsnNode;
|
||||
|
||||
public class PluginLoggerTransformer implements PluginTransformer {
|
||||
|
||||
@Override
|
||||
public void handleClass(ClassNode node, ClassLoaderRemapper remapper) {
|
||||
for (var mn : node.methods) {
|
||||
for (var insn : mn.instructions) {
|
||||
if (insn.getOpcode() == Opcodes.INVOKESTATIC && insn instanceof MethodInsnNode method
|
||||
&& method.owner.equals("java/util/logging/Logger") && method.name.equals("getLogger")) {
|
||||
method.owner = Type.getInternalName(ArclightPluginLogger.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,13 +33,21 @@ public class ArclightImplementer implements ILaunchPluginService {
|
|||
private final boolean logger;
|
||||
|
||||
public ArclightImplementer() {
|
||||
this(false);
|
||||
this(detectTransformLogger());
|
||||
}
|
||||
|
||||
public ArclightImplementer(boolean logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
private static boolean detectTransformLogger() {
|
||||
var transformLogger = !(java.util.logging.LogManager.getLogManager() instanceof org.apache.logging.log4j.jul.LogManager);
|
||||
if (transformLogger && !System.getProperties().contains("log4j.jul.LoggerAdapter")) {
|
||||
System.setProperty("log4j.jul.LoggerAdapter", "io.izzel.arclight.boot.log.ArclightLoggerAdapter");
|
||||
}
|
||||
return transformLogger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return "arclight_implementer";
|
||||
|
|
|
@ -98,11 +98,7 @@ public class ModBootstrap extends AbstractBootstrap {
|
|||
var plugins = LaunchPluginHandler.class.getDeclaredField("plugins");
|
||||
plugins.setAccessible(true);
|
||||
var map = (Map<String, ILaunchPluginService>) plugins.get(handler);
|
||||
var transformLogger = !(java.util.logging.LogManager.getLogManager() instanceof org.apache.logging.log4j.jul.LogManager);
|
||||
if (transformLogger && !System.getProperties().contains("log4j.jul.LoggerAdapter")) {
|
||||
System.setProperty("log4j.jul.LoggerAdapter", "io.izzel.arclight.boot.log.ArclightLoggerAdapter");
|
||||
}
|
||||
var plugin = new ArclightImplementer(transformLogger);
|
||||
var plugin = new ArclightImplementer();
|
||||
map.put(plugin.name(), plugin);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user