Skip to content

Commit 9ae095e

Browse files
committed
Load ReflectionUtil if property is present
1 parent 90ab4d2 commit 9ae095e

File tree

4 files changed

+27
-17
lines changed

4 files changed

+27
-17
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>net.azisaba</groupId>
88
<artifactId>Log4j2Fix</artifactId>
9-
<version>1.0.2</version>
9+
<version>1.0.3</version>
1010

1111
<properties>
1212
<maven.compiler.source>8</maven.compiler.source>

src/main/java/net/azisaba/log4j2Fix/Log4j2Fix.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -96,30 +96,40 @@ public static void premain(String args, Instrumentation instrumentation) throws
9696
}
9797

9898
public static void transformClasses() throws IOException {
99-
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender");
100-
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender$1");
101-
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender$Builder");
102-
transformClass("org.apache.logging.log4j.core.net.JndiManager");
103-
transformClass("org.apache.logging.log4j.core.net.JndiManager$1");
104-
transformClass("org.apache.logging.log4j.core.net.JndiManager$JndiManagerFactory");
105-
transformClass("org.apache.logging.log4j.core.util.NetUtils");
99+
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender", false);
100+
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender$1", false);
101+
transformClass("org.apache.logging.log4j.core.appender.mom.JmsAppender$Builder", false);
102+
transformClass("org.apache.logging.log4j.core.net.JndiManager", false);
103+
transformClass("org.apache.logging.log4j.core.net.JndiManager$1", false);
104+
transformClass("org.apache.logging.log4j.core.net.JndiManager$JndiManagerFactory", false);
105+
transformClass("org.apache.logging.log4j.core.util.NetUtils", false);
106+
if (Boolean.getBoolean("log4j2Fix.loadReflectionUtil")) {
107+
transformClass("org.apache.logging.log4j.util.ReflectionUtil", true);
108+
transformClass("org.apache.logging.log4j.util.ReflectionUtil$PrivateSecurityManager", true);
109+
}
106110
}
107111

108-
public static void transformClass(String className) throws IOException {
112+
public static void transformClass(String className, boolean loadNow) throws IOException {
109113
Class<?> clazz = Arrays.stream(NativeUtil.getLoadedClasses()).filter(clazz2 -> clazz2.getTypeName().equals(className)).findFirst().orElse(null);
110114
if (clazz == null) {
111115
String path = "/classes/" + className.replace('.', '/') + ".class";
112116
InputStream in = Log4j2Fix.class.getResourceAsStream(path);
113117
if (in == null) throw new RuntimeException("Could not find '" + path + "' in jar file");
114118
byte[] newClassBytes = readAllBytes(in);
115-
System.out.println(className + " is not loaded, registering class load hook");
116-
NativeUtil.registerClassLoadHook((classLoader, s, aClass, protectionDomain, bytes) -> {
117-
if (s.equals(className.replace('.', '/'))) {
118-
System.out.println("Transformed " + className);
119-
return newClassBytes;
120-
}
121-
return null;
122-
});
119+
if (loadNow) {
120+
System.out.println("Loading class " + className + " from " + path);
121+
Class<?> actualClass = NativeUtil.defineClass(className.replace('.', '/'), ClassLoader.getSystemClassLoader(), newClassBytes, newClassBytes.length);
122+
System.out.println("Loaded class '" + actualClass.toGenericString() + "' from " + path);
123+
} else {
124+
System.out.println(className + " is not loaded, registering class load hook");
125+
NativeUtil.registerClassLoadHook((classLoader, s, aClass, protectionDomain, bytes) -> {
126+
if (s.equals(className.replace('.', '/'))) {
127+
System.out.println("Transformed " + className);
128+
return newClassBytes;
129+
}
130+
return null;
131+
});
132+
}
123133
} else {
124134
System.err.println(className + " is already loaded, cannot process " + className);
125135
}
Binary file not shown.

0 commit comments

Comments
 (0)