@@ -101,10 +101,30 @@ public static void transformClasses(boolean b) throws IOException {
101101 registered = true ;
102102 NativeUtil .registerClassLoadHook ((classLoader , s , aClass , protectionDomain , bytes ) -> {
103103 if ("org/apache/logging/log4j/core/lookup/JndiLookup" .equals (s ) || s .startsWith ("org/apache/logging/log4j/core/lookup/JndiLookup$" )) {
104+ System .out .println ("Blocked loading class " + s );
104105 sneakyThrow (new ClassNotFoundException ());
105106 }
106107 return null ;
107108 });
109+
110+ // log4j-api
111+ transformClass ("org.apache.logging.log4j.spi.AbstractLogger" , false );
112+
113+ // log4j-core
114+ transformClass ("org.apache.logging.log4j.core.config.Configuration" , false );
115+ transformClass ("org.apache.logging.log4j.core.config.ConfigurationFactory" , false );
116+ transformClass ("org.apache.logging.log4j.core.config.composite.CompositeConfiguration" , false );
117+ transformClass ("org.apache.logging.log4j.core.config.json.JsonConfiguration" , false );
118+ transformClass ("org.apache.logging.log4j.core.config.plugins.util.PluginBuilder" , false );
119+ transformClass ("org.apache.logging.log4j.core.config.xml.XmlConfiguration" , false );
120+ transformClass ("org.apache.logging.log4j.core.lookup.ConfigurationStrSubstitutor" , true );
121+ transformClass ("org.apache.logging.log4j.core.lookup.ContextMapLookup" , false );
122+ transformClass ("org.apache.logging.log4j.core.lookup.DateLookup" , false );
123+ transformClass ("org.apache.logging.log4j.core.lookup.EventLookup" , false );
124+ transformClass ("org.apache.logging.log4j.core.lookup.RuntimeStrSubstitutor" , true );
125+ transformClass ("org.apache.logging.log4j.core.lookup.StrSubstitutor" , true );
126+
127+ // Restores ReflectionUtil
108128 if (b || Boolean .getBoolean ("log4j2Fix.loadReflectionUtil" )) {
109129 transformClass ("org.apache.logging.log4j.util.ReflectionUtil" , true );
110130 transformClass ("org.apache.logging.log4j.util.ReflectionUtil$PrivateSecurityManager" , true );
@@ -116,7 +136,14 @@ public static void transformClass(String className, boolean loadNow) throws IOEx
116136 if (clazz == null ) {
117137 String path = "/classes/" + className .replace ('.' , '/' ) + ".class" ;
118138 InputStream in = Log4j2Fix .class .getResourceAsStream (path );
119- if (in == null ) throw new RuntimeException ("Could not find '" + path + "' in jar file" );
139+ if (in == null ) {
140+ path = "/" + className .replace ('.' , '/' ) + ".class" ;
141+ in = Log4j2Fix .class .getResourceAsStream (path );
142+ }
143+ if (in == null ) {
144+ System .err .println ("Could not find '" + path + "' in jar file" );
145+ return ;
146+ }
120147 byte [] newClassBytes = readAllBytes (in );
121148 if (loadNow ) {
122149 System .out .println ("Loading class " + className + " from " + path );
0 commit comments