diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/log/ArclightPluginLogger.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/log/ArclightPluginLogger.java index d4f5ad17..7ccbdd69 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/log/ArclightPluginLogger.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/log/ArclightPluginLogger.java @@ -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); + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java index caa7fd36..1e7270b9 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/ArclightRemapper.java @@ -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); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/PluginLoggerTransformer.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/PluginLoggerTransformer.java new file mode 100644 index 00000000..50de55e9 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/remapper/patcher/PluginLoggerTransformer.java @@ -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); + } + } + } + } +} diff --git a/arclight-forge/src/main/java/io/izzel/arclight/boot/asm/ArclightImplementer.java b/arclight-forge/src/main/java/io/izzel/arclight/boot/asm/ArclightImplementer.java index 0a330dea..95ea6c37 100644 --- a/arclight-forge/src/main/java/io/izzel/arclight/boot/asm/ArclightImplementer.java +++ b/arclight-forge/src/main/java/io/izzel/arclight/boot/asm/ArclightImplementer.java @@ -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"; diff --git a/arclight-forge/src/main/java/io/izzel/arclight/boot/mod/ModBootstrap.java b/arclight-forge/src/main/java/io/izzel/arclight/boot/mod/ModBootstrap.java index 05c11bf0..73dfa5ca 100644 --- a/arclight-forge/src/main/java/io/izzel/arclight/boot/mod/ModBootstrap.java +++ b/arclight-forge/src/main/java/io/izzel/arclight/boot/mod/ModBootstrap.java @@ -98,11 +98,7 @@ public class ModBootstrap extends AbstractBootstrap { var plugins = LaunchPluginHandler.class.getDeclaredField("plugins"); plugins.setAccessible(true); var map = (Map) 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); }