This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch feature/revamp-minimal-profiles
in repository https://gitbox.apache.org/repos/asf/logging-log4j-samples.git

commit e5f459b0bfbcc793bfda17c49e7a8686b258a892
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Tue Oct 22 17:33:51 2024 +0200

    Add customized GraalVM configurations
    
    By using the new `log4j-convert-plugin-descriptor` tool introduced in
    apache/logging-log4j-transform#139
    this PR:
    
    1. Adds a customized `use-log4j-core-jtl-minimal` GraalVM profile that
       only includes the plugins required by JSON Template Layout.
    2. Generates the existent `use-log4j-core-minimal` GraalVM profile using
       a custom `Log4j2Plugins.json` file. The previous profile was edited
       manually.
    
    Closes apache/logging-log4j2#2834.
---
 log4j-samples-graalvm/README.adoc                  |  100 +-
 log4j-samples-graalvm/pom.xml                      |  310 +++--
 .../src/reachability-metadata/jul/index.json       |    4 -
 .../java.util.logging}/reflect-config.json         |    0
 .../java.util.logging}/resource-config.json        |    2 +-
 .../log4j-core-jtl-minimal/Log4j2Plugins.json      |  535 ++++++++
 .../log4j-core}/reflect-config.json                |  392 ++++--
 .../log4j-layout-template-json/reflect-config.json |  288 +++++
 .../log4j/core/config/plugins/Log4j2Plugins.dat    |  Bin 0 -> 6630 bytes
 .../resources/log4j2.component.properties          |   18 +
 .../resources/log4j2.component.properties          |   18 +
 .../log4j-core-minimal/Log4j2Plugins.json          |  747 +++++++++++
 .../log4j-core/reflect-config.json                 | 1320 ++++++++++++++++++++
 .../log4j/core/config/plugins/Log4j2Plugins.dat    |  Bin 0 -> 8517 bytes
 .../logback-classic}/resource-config.json          |    2 +-
 .../src/reachability-metadata/minimal/index.json   |    9 -
 .../minimal/log4j-core/2.24.0/index.json           |    4 -
 .../minimal/log4j-core/2.24.0/resource-config.json |   22 -
 .../minimal/log4j-core/index.json                  |   11 -
 .../simple/resources/log4j2.component.properties   |   19 +
 20 files changed, 3499 insertions(+), 302 deletions(-)

diff --git a/log4j-samples-graalvm/README.adoc 
b/log4j-samples-graalvm/README.adoc
index 59c44f2..0219412 100644
--- a/log4j-samples-graalvm/README.adoc
+++ b/log4j-samples-graalvm/README.adoc
@@ -19,11 +19,11 @@ limitations under the License.
 
 This project shows how to generate a native image using GraalVM.
 
-In order to use it:
+To use it:
 
-. set the `JAVA_HOME` environment variable to the path of a GraalVM 
installation,
-. set the current working directory to the folder containing this file,
-. generate the artifact locally with:
+. Set the `JAVA_HOME` environment variable to the path of a GraalVM 
installation,
+. Set the current working directory to the folder containing this file,
+. Generate the artifact locally with:
 +
 [source,shell]
 ----
@@ -32,24 +32,42 @@ In order to use it:
 +
 where `<backend>` can be:
 
+`simple`::
+This profile uses `SimpleLogger` as logging backend.
+
+`jul`::
+This profile uses `java.util.logging` as logging backend.
+
+`logback`::
+This profile uses Logback as logging backend.
+
 `log4j-core`::
 This profile uses Log4j Core as logging backend with its out-of-the-box 
reachability metadata.
+It uses
+https://logging.apache.org/log4j/2.x/manual/pattern-layout.html[Pattern Layout]
+to format log events.
 
 `log4j-core-jtl`::
-This profile uses Log4j Core as logging backend with the addition of JSON 
Template Layout.
+This profile uses Log4j Core as logging backend with its out-of-the-box 
reachability metadata.
+It uses
+https://logging.apache.org/log4j/2.x/manual/json-template-layout.html[JSON 
Template Layout]
+to format log events.
 
+[#log4j-core-minimal]
 `log4j-core-minimal`::
 This profile uses Log4j Core a logging backend with an external reachability 
metadata source optimized for size.
+It uses
+https://logging.apache.org/log4j/2.x/manual/pattern-layout.html[Pattern Layout]
+to format log events.
 
-`logback`::
-This profile uses Logback as logging backend.
-
-`jul`::
-This profile uses `java.util.logging` as logging backend.
+[#log4j-core-jtl-minimal]
+`log4j-core-jtl-minimal`::
+This profile uses Log4j Core a logging backend with an external reachability 
metadata source optimized for size.
+It uses
+https://logging.apache.org/log4j/2.x/manual/json-template-layout.html[JSON 
Template Layout]
+to format log events.
 
-`simple`::
-This profile uses `SimpleLogger` as logging backend.
-. run the application with
+. Run the application with
 +
 [source,shell]
 ----
@@ -58,10 +76,9 @@ target/log4j-samples-graalvm
 
 == Reachability metadata
 
-Log4j as many other Java libraries, relies heavily on reflection to convert 
the configuration file into an instance of a
+Log4j, as many other Java libraries, relies heavily on reflection to convert 
the configuration file into an instance of a
 
https://logging.apache.org/log4j/2.x/javadoc/log4j-core/org/apache/logging/log4j/core/config/Configuration.html[Configuration]
 object.
-
 The classes that are accessed through reflection are called Log4j plugins and 
GraalVM must be aware of their existence through the usage of reachability 
metadata.
 
 See
@@ -70,28 +87,15 @@ and
 https://www.graalvm.org/latest/reference-manual/native-image/metadata/[GraalVM 
reachability metadata]
 for more details.
 
-The reachability metadata in this project was:
-
-* generated using the
-https://www.graalvm.org/latest/reference-manual/native-image/metadata/AutomaticMetadataCollection/#tracing-agent[GraalVM
 tracing agent]:
-+
-[source,shell,subs=+attributes]
-----
-# Build application classpath
-export CLASSPATH=$(\
-../mvnw -q \
-dependency:build-classpath -DincludeScope=runtime 
-Dmdep.outputProperty=classpath \
-help:evaluate -Dexpression=classpath -DforceStdout \
-)
-CLASSPATH="target/log4j-samples-graalvm-0.0.0-SNAPSHOT.jar:$CLASSPATH"
-# Run application using the GraalVM agent
-$JAVA_HOME/bin/java \
--agentlib:native-image-agent=config-output-dir=src/reachability-metadata/minimal/log4j-core/2.24.0
 \
-org.apache.logging.log4j.samples.graalvm.Main
-----
-
-* the generated `reflect-config.json` file was further trimmed down manually, 
by removing all the Log4j plugins that are not used by this configuration.
-These plugins are easy to spot, because they only have a `name` key.
+The
+https://logging.apache.org/log4j/2.x/manual/plugins.html#plugin-registry[Log4j 
plugin descriptors]
+and
+GraalVM reachability metadata used in the customized
+<<log4j-core-minimal,`use-log4j-core-minimal`>>
+and
+<<log4j-core-jtl-minimal,`use-log4j-core-jtl-minimal`>>
+profiles were generated using the procedure described in the documentation of 
the
+https://logging.apache.org/log4j/transform/cli.html#log4j-converter-plugin-descriptor[`log4j-converter-plugin-descriptor`
 tool].
 
 == Native binary size
 
@@ -104,25 +108,29 @@ Since this is a trivial Java application, the difference 
between the binary size
 In a typical application, those classes are already required, so the 
difference should be smaller.
 ====
 
-[cols="1,1"]
+[cols="3,1"]
 |===
 | Configuration | Size
 
+| With `SimpleLogger`
+| 13.90 MiB
+
+| With `java.util.logging`
+| 14.10 MiB
+
+| With Logback
+| 30.62 MiB
+
 | With Log4j Core (manually optimized reachability metadata)
 | 36.19 MiB
 
+| With Log4j Core + JSON Template Layout (manually optimized reachability 
metadata)
+| 37.40 MiB
+
 | With Log4j Core (embedded full reachability metadata)
 | 46.80 MiB
 
 | With Log4j Core + JSON Template Layout (embedded full reachability metadata)
 | 47.37 MiB
 
-| With Logback
-| 30.62 MiB
-
-| With `java.util.logging`
-| 14.10 MiB
-
-| With `SimpleLogger`
-| 13.90 MiB
 |===
diff --git a/log4j-samples-graalvm/pom.xml b/log4j-samples-graalvm/pom.xml
index efe7a69..793f3ca 100644
--- a/log4j-samples-graalvm/pom.xml
+++ b/log4j-samples-graalvm/pom.xml
@@ -24,6 +24,7 @@
     <relativePath />
   </parent>
 
+  <groupId>org.apache.logging.log4j.samples</groupId>
   <artifactId>log4j-samples-graalvm</artifactId>
   <version>${revision}</version>
   <name>Apache Log4j Samples: GraalVM native image</name>
@@ -66,6 +67,7 @@
 
     <!-- IT to run for each profile -->
     <integration-tests-include>none</integration-tests-include>
+    <profile-resources>none</profile-resources>
   </properties>
 
   <dependencyManagement>
@@ -160,6 +162,32 @@
   <build>
     <plugins>
 
+      <!--
+        ~ Step 0: we add per-profile resource.
+        -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>add-profile-resources</id>
+            <goals>
+              <goal>add-resource</goal>
+            </goals>
+            <configuration>
+              <resources>
+                <resource>
+                  
<directory>src/reachability-metadata/${profile-resources}/resources</directory>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        ~ Step 1: we create the application as executable JAR without 
dependencies.
+        -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
@@ -178,19 +206,68 @@
       </plugin>
 
       <!--
-        ~ Creates a native executable
+        ~ Step 2 (optional): we shade the application.
+        ~
+        ~ This step is only necessary to create custom images containing Log4j 
Core in the profiles:
+        ~ * `use-log4j-core-minimal`
+        ~ * `use-log4j-core-jtl-minimal`
+        ~
+        ~ This step is disabled by default.
+        -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>shade-jar-with-dependencies</id>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <phase>none</phase>
+            <configuration>
+              <filters>
+                <filter>
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <exclude>module-info.class</exclude>
+                    <exclude>META-INF/versions/*/module-info.class</exclude>
+                    <exclude>META-INF/MANIFEST.MF</exclude>
+                    <exclude>META-INF/DEPENDENCIES</exclude>
+                  </excludes>
+                </filter>
+                <!--
+                  ~ Removes the metadata embedded in official Log4j JARs.
+                  ~ The metadata will be replaced with a custom version.
+                  -->
+                <filter>
+                  <artifact>org.apache.logging.log4j:*</artifact>
+                  <excludes>
+                    
<exclude>META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat</exclude>
+                    
<exclude>META-INF/native-image/org.apache.logging.log4j/*/reflect-config.json</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+              <shadedArtifactAttached>true</shadedArtifactAttached>
+              <shadedClassifierName>shaded</shadedClassifierName>
+              <transformers>
+                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer"
 />
+                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer"
 />
+                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
+                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"
 />
+              </transformers>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!--
+        ~ Step 3: Creates a native executable.
         -->
       <plugin>
         <groupId>org.graalvm.buildtools</groupId>
         <artifactId>native-maven-plugin</artifactId>
         <version>0.10.3</version>
         <extensions>true</extensions>
-        <configuration>
-          <mainClass>org.apache.logging.log4j.samples.graalvm.Main</mainClass>
-          <metadataRepository>
-            <enabled>false</enabled>
-          </metadataRepository>
-        </configuration>
         <executions>
           <execution>
             <id>build-native</id>
@@ -198,12 +275,18 @@
               <goal>compile-no-fork</goal>
             </goals>
             <phase>package</phase>
+            <configuration>
+              
<mainClass>org.apache.logging.log4j.samples.graalvm.Main</mainClass>
+              <metadataRepository>
+                <enabled>false</enabled>
+              </metadataRepository>
+            </configuration>
           </execution>
         </executions>
       </plugin>
 
       <!--
-        ~ Cleans the logs directory before running the executable
+        ~ Step 4: Cleans the logs directory before running the executable.
         -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
@@ -231,7 +314,7 @@
       </plugin>
 
       <!--
-        ~ Runs the native executable
+        ~ Step 5: Runs the native executable.
         -->
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
@@ -253,7 +336,7 @@
       </plugin>
 
       <!--
-        ~ Verifies the content of the log file
+        ~ Step 6: Verifies the content of the log file.
         -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
@@ -277,6 +360,9 @@
   <profiles>
 
     <!--
+      ~ 
################################################################################################################
+      ~ JAVA UTIL LOGGING
+      ~ 
################################################################################################################
       ~ Enable this profile to use JUL as logging implementation.
       -->
     <profile>
@@ -284,6 +370,7 @@
 
       <properties>
         <integration-tests-include>**/JulIT.class</integration-tests-include>
+        <profile-resources>jul</profile-resources>
       </properties>
 
       <dependencies>
@@ -293,26 +380,12 @@
           <scope>runtime</scope>
         </dependency>
       </dependencies>
-
-      <build>
-        <plugins>
-          <!--
-            ~ JUL requires reflection metadata for FileHandler
-            -->
-          <plugin>
-            <groupId>org.graalvm.buildtools</groupId>
-            <artifactId>native-maven-plugin</artifactId>
-            <configuration>
-              <buildArgs>
-                
<arg>-H:ConfigurationFileDirectories=${basedir}/src/reachability-metadata/jul</arg>
-              </buildArgs>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
     </profile>
 
     <!--
+      ~ 
################################################################################################################
+      ~ LOG4J CORE (minimal)
+      ~ 
################################################################################################################
       ~ Enable this profile to use Log4j Core as logging implementation with a 
manually crafted metadata file.
       -->
     <profile>
@@ -320,6 +393,7 @@
 
       <properties>
         
<integration-tests-include>**/StandardIT.class</integration-tests-include>
+        <profile-resources>log4j-core-minimal</profile-resources>
       </properties>
 
       <dependencies>
@@ -330,31 +404,47 @@
         </dependency>
       </dependencies>
 
+      <!--
+        ~ Use a different source of Log4j Core metadata.
+        -->
       <build>
         <plugins>
-          <!--
-            ~ Use a different source of Log4j Core metadata.
-            -->
+          <!-- Filter out the full embedded configuration -->
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-shade-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>shade-jar-with-dependencies</id>
+                <phase>package</phase>
+              </execution>
+            </executions>
+          </plugin>
+          <!-- Creates native image based on the shaded artifact -->
           <plugin>
             <groupId>org.graalvm.buildtools</groupId>
             <artifactId>native-maven-plugin</artifactId>
-            <configuration>
-              <buildArgs>
-                <arg>--exclude-config</arg>
-                <arg>log4j-core.*jar</arg>
-                
<arg>META-INF/native-image/org\.apache\.logging\.log4j/log4j-core/reflect-config\.json</arg>
-              </buildArgs>
-              <metadataRepository>
-                <enabled>true</enabled>
-                
<localPath>${project.basedir}/src/reachability-metadata/minimal</localPath>
-              </metadataRepository>
-            </configuration>
+            <version>0.10.3</version>
+            <extensions>true</extensions>
+            <executions>
+              <execution>
+                <id>build-native</id>
+                <configuration>
+                  <classpath>
+                    
<jar>${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar</jar>
+                  </classpath>
+                </configuration>
+              </execution>
+            </executions>
           </plugin>
         </plugins>
       </build>
     </profile>
 
     <!--
+      ~ 
################################################################################################################
+      ~ LOG4J CORE (full)
+      ~ 
################################################################################################################
       ~ Enable this profile to use Log4j Core as logging implementation with a 
full metadata file.
       -->
     <profile>
@@ -374,13 +464,17 @@
     </profile>
 
     <!--
-  ~ Enable this profile to use Log4j Core + JSON Template Layout
-  -->
+      ~ 
################################################################################################################
+      ~ LOG4J CORE + JTL (minimal)
+      ~ 
################################################################################################################
+      ~ Enable this profile to use a handcrafted configuration Log4j Core + 
JSON Template Layout
+      -->
     <profile>
-      <id>use-log4j-core-jtl</id>
+      <id>use-log4j-core-jtl-minimal</id>
 
       <properties>
         
<integration-tests-include>**/JsonTemplateLayoutIT.class</integration-tests-include>
+        <profile-resources>log4j-core-jtl-minimal</profile-resources>
       </properties>
 
       <dependencies>
@@ -405,22 +499,35 @@
 
       </dependencies>
 
+      <!--
+        ~ Use a different source of Log4j Core metadata.
+        -->
       <build>
         <plugins>
-          <!--
-            ~ The JSON Template Layout configuration is in `log4j2-jtl`.
-            -->
+          <!-- Filter out the full embedded configuration -->
           <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>3.5.0</version>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-shade-plugin</artifactId>
             <executions>
               <execution>
-                <id>run-executable</id>
+                <id>shade-jar-with-dependencies</id>
+                <phase>package</phase>
+              </execution>
+            </executions>
+          </plugin>
+          <!-- Creates native image based on the shaded artifact -->
+          <plugin>
+            <groupId>org.graalvm.buildtools</groupId>
+            <artifactId>native-maven-plugin</artifactId>
+            <version>0.10.3</version>
+            <extensions>true</extensions>
+            <executions>
+              <execution>
+                <id>build-native</id>
                 <configuration>
-                  <arguments>
-                    
<argument>-Dlog4j2.configurationFile=log4j2-jtl.xml</argument>
-                  </arguments>
+                  <classpath>
+                    
<jar>${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar</jar>
+                  </classpath>
                 </configuration>
               </execution>
             </executions>
@@ -430,6 +537,46 @@
     </profile>
 
     <!--
+      ~ 
################################################################################################################
+      ~ LOG4J CORE + JTL (full)
+      ~ 
################################################################################################################
+      ~ Enable this profile to use Log4j Core + JSON Template Layout
+      -->
+    <profile>
+      <id>use-log4j-core-jtl</id>
+
+      <properties>
+        
<integration-tests-include>**/JsonTemplateLayoutIT.class</integration-tests-include>
+        <profile-resources>log4j-core-jtl</profile-resources>
+      </properties>
+
+      <dependencies>
+
+        <dependency>
+          <groupId>org.apache.logging.log4j</groupId>
+          <artifactId>log4j-core</artifactId>
+          <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+          <groupId>org.apache.logging.log4j</groupId>
+          <artifactId>log4j-layout-template-json</artifactId>
+          <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-nop</artifactId>
+          <scope>test</scope>
+        </dependency>
+
+      </dependencies>
+    </profile>
+
+    <!--
+      ~ 
################################################################################################################
+      ~ LOGBACK
+      ~ 
################################################################################################################
       ~ Enable this profile to use Logback as logging implementation.
       -->
     <profile>
@@ -437,6 +584,7 @@
 
       <properties>
         
<integration-tests-include>**/StandardIT.class</integration-tests-include>
+        <profile-resources>logback</profile-resources>
       </properties>
 
       <dependencies>
@@ -455,56 +603,42 @@
 
       </dependencies>
 
+      <!--
+        ~ Logback needs additional metadata
+        -->
       <build>
         <plugins>
-          <!--
-            ~ Logback needs additional metadata
-            -->
+          <!-- Use external reflection metadata configuration -->
           <plugin>
             <groupId>org.graalvm.buildtools</groupId>
             <artifactId>native-maven-plugin</artifactId>
-            <configuration>
-              <metadataRepository>
-                <enabled>true</enabled>
-              </metadataRepository>
-              <buildArgs>
-                <arg>-H:IncludeResources=logback.xml</arg>
-              </buildArgs>
-            </configuration>
+            <executions>
+              <execution>
+                <id>build-native</id>
+                <configuration>
+                  <metadataRepository>
+                    <enabled>true</enabled>
+                  </metadataRepository>
+                </configuration>
+              </execution>
+            </executions>
           </plugin>
         </plugins>
       </build>
     </profile>
 
+    <!--
+      ~ 
################################################################################################################
+      ~ SIMPLE LOGGER
+      ~ 
################################################################################################################
+      -->
     <profile>
       <id>use-simple</id>
 
       <properties>
         
<integration-tests-include>**/SimpleIT.class</integration-tests-include>
+        <profile-resources>simple</profile-resources>
       </properties>
-
-      <build>
-        <plugins>
-          <!--
-            ~ SimpleLogger needs some system properties
-            -->
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>exec-maven-plugin</artifactId>
-            <version>3.5.0</version>
-            <executions>
-              <execution>
-                <id>run-executable</id>
-                <configuration>
-                  <arguments>
-                    
<argument>-Dlog4j.provider=org.apache.logging.log4j.simple.internal.SimpleProvider</argument>
-                  </arguments>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
     </profile>
   </profiles>
 </project>
diff --git a/log4j-samples-graalvm/src/reachability-metadata/jul/index.json 
b/log4j-samples-graalvm/src/reachability-metadata/jul/index.json
deleted file mode 100644
index 93a3dda..0000000
--- a/log4j-samples-graalvm/src/reachability-metadata/jul/index.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
-  "reflect-config.json",
-  "resource-config.json"
-]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/jul/reflect-config.json 
b/log4j-samples-graalvm/src/reachability-metadata/jul/resources/META-INF/native-image/java.util.logging/reflect-config.json
similarity index 100%
rename from 
log4j-samples-graalvm/src/reachability-metadata/jul/reflect-config.json
rename to 
log4j-samples-graalvm/src/reachability-metadata/jul/resources/META-INF/native-image/java.util.logging/reflect-config.json
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json 
b/log4j-samples-graalvm/src/reachability-metadata/jul/resources/META-INF/native-image/java.util.logging/resource-config.json
similarity index 64%
copy from 
log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json
copy to 
log4j-samples-graalvm/src/reachability-metadata/jul/resources/META-INF/native-image/java.util.logging/resource-config.json
index 6f02a9c..e0e35e1 100644
--- a/log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/jul/resources/META-INF/native-image/java.util.logging/resource-config.json
@@ -2,7 +2,7 @@
   "resources": {
     "includes": [
       {
-        "pattern": "\\Qlogging.properties\\E"
+        "pattern": "logging\\.properties"
       }
     ]
   },
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/Log4j2Plugins.json
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/Log4j2Plugins.json
new file mode 100644
index 0000000..7812f6f
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/Log4j2Plugins.json
@@ -0,0 +1,535 @@
+{
+  "configurationfactory": {
+    "org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory": {
+      "pluginNames": [
+        "xmlconfigurationfactory"
+      ],
+      "elementName": "XmlConfigurationFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  },
+  "core": {
+    "org.apache.logging.log4j.core.appender.ConsoleAppender": {
+      "pluginNames": [
+        "console"
+      ],
+      "elementName": "appender",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.appender.ConsoleAppender$Builder",
+        
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
+        "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
+        "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.appender.FileAppender": {
+      "pluginNames": [
+        "file"
+      ],
+      "elementName": "appender",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.appender.FileAppender$Builder",
+        
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
+        "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
+        "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.AppenderRef": {
+      "pluginNames": [
+        "appender-ref",
+        "appenderref"
+      ],
+      "elementName": "appender-ref",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.config.AppendersPlugin": {
+      "pluginNames": [
+        "appenders"
+      ],
+      "elementName": "Appenders",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.config.LoggerConfig": {
+      "pluginNames": [
+        "logger"
+      ],
+      "elementName": "Logger",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.config.LoggerConfig$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger": {
+      "pluginNames": [
+        "root"
+      ],
+      "elementName": "Root",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.LoggersPlugin": {
+      "pluginNames": [
+        "loggers"
+      ],
+      "elementName": "Loggers",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.layout.template.json.JsonTemplateLayout": {
+      "pluginNames": [
+        "jsontemplatelayout"
+      ],
+      "elementName": "layout",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": [
+        
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$Builder"
+      ]
+    },
+    
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$EventTemplateAdditionalField":
 {
+      "pluginNames": [
+        "eventtemplateadditionalfield"
+      ],
+      "elementName": "EventTemplateAdditionalField",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$EventTemplateAdditionalField$Builder"
+      ]
+    }
+  },
+  "jsontemplateresolverfactory": {
+    
"org.apache.logging.log4j.layout.template.json.resolver.CaseConverterResolverFactory":
 {
+      "pluginNames": [
+        "caseconverterresolverfactory"
+      ],
+      "elementName": "CaseConverterResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.CounterResolverFactory":
 {
+      "pluginNames": [
+        "counterresolverfactory"
+      ],
+      "elementName": "CounterResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.EndOfBatchResolverFactory":
 {
+      "pluginNames": [
+        "endofbatchresolverfactory"
+      ],
+      "elementName": "EndOfBatchResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.ExceptionResolverFactory":
 {
+      "pluginNames": [
+        "exceptionresolverfactory"
+      ],
+      "elementName": "ExceptionResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.ExceptionRootCauseResolverFactory":
 {
+      "pluginNames": [
+        "exceptionrootcauseresolverfactory"
+      ],
+      "elementName": "ExceptionRootCauseResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.LevelResolverFactory": {
+      "pluginNames": [
+        "levelresolverfactory"
+      ],
+      "elementName": "LevelResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.LoggerResolverFactory": 
{
+      "pluginNames": [
+        "loggerresolverfactory"
+      ],
+      "elementName": "LoggerResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.MainMapResolverFactory":
 {
+      "pluginNames": [
+        "mainmapresolverfactory"
+      ],
+      "elementName": "MainMapResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.MapResolverFactory": {
+      "pluginNames": [
+        "mapresolverfactory"
+      ],
+      "elementName": "MapResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.MarkerResolverFactory": 
{
+      "pluginNames": [
+        "markerresolverfactory"
+      ],
+      "elementName": "MarkerResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.MessageParameterResolverFactory":
 {
+      "pluginNames": [
+        "messageparameterresolverfactory"
+      ],
+      "elementName": "MessageParameterResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.MessageResolverFactory":
 {
+      "pluginNames": [
+        "messageresolverfactory"
+      ],
+      "elementName": "MessageResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.SourceResolverFactory": 
{
+      "pluginNames": [
+        "sourceresolverfactory"
+      ],
+      "elementName": "SourceResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.ThreadContextDataResolverFactory":
 {
+      "pluginNames": [
+        "threadcontextdataresolverfactory"
+      ],
+      "elementName": "ThreadContextDataResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.ThreadContextStackResolverFactory":
 {
+      "pluginNames": [
+        "threadcontextstackresolverfactory"
+      ],
+      "elementName": "ThreadContextStackResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.ThreadResolverFactory": 
{
+      "pluginNames": [
+        "threadresolverfactory"
+      ],
+      "elementName": "ThreadResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.TimestampResolverFactory":
 {
+      "pluginNames": [
+        "timestampresolverfactory"
+      ],
+      "elementName": "TimestampResolverFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  },
+  "jsontemplateresolverinterceptor": {
+    
"org.apache.logging.log4j.layout.template.json.resolver.EventAdditionalFieldInterceptor":
 {
+      "pluginNames": [
+        "eventadditionalfieldinterceptor"
+      ],
+      "elementName": "EventAdditionalFieldInterceptor",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.resolver.EventRootObjectKeyInterceptor":
 {
+      "pluginNames": [
+        "eventrootobjectkeyinterceptor"
+      ],
+      "elementName": "EventRootObjectKeyInterceptor",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  },
+  "typeconverter": {
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter":
 {
+      "pluginNames": [
+        "bigdecimal"
+      ],
+      "elementName": "BigDecimal",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter":
 {
+      "pluginNames": [
+        "biginteger"
+      ],
+      "elementName": "BigInteger",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter":
 {
+      "pluginNames": [
+        "boolean"
+      ],
+      "elementName": "Boolean",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter":
 {
+      "pluginNames": [
+        "bytearray"
+      ],
+      "elementName": "ByteArray",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter":
 {
+      "pluginNames": [
+        "byte"
+      ],
+      "elementName": "Byte",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter":
 {
+      "pluginNames": [
+        "characterarray"
+      ],
+      "elementName": "CharacterArray",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter":
 {
+      "pluginNames": [
+        "character"
+      ],
+      "elementName": "Character",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter":
 {
+      "pluginNames": [
+        "charset"
+      ],
+      "elementName": "Charset",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter":
 {
+      "pluginNames": [
+        "class"
+      ],
+      "elementName": "Class",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter":
 {
+      "pluginNames": [
+        "cronexpression"
+      ],
+      "elementName": "CronExpression",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter":
 {
+      "pluginNames": [
+        "double"
+      ],
+      "elementName": "Double",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter":
 {
+      "pluginNames": [
+        "duration"
+      ],
+      "elementName": "Duration",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter":
 {
+      "pluginNames": [
+        "file"
+      ],
+      "elementName": "File",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter":
 {
+      "pluginNames": [
+        "float"
+      ],
+      "elementName": "Float",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter":
 {
+      "pluginNames": [
+        "inetaddress"
+      ],
+      "elementName": "InetAddress",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter":
 {
+      "pluginNames": [
+        "integer"
+      ],
+      "elementName": "Integer",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter":
 {
+      "pluginNames": [
+        "level"
+      ],
+      "elementName": "Level",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter":
 {
+      "pluginNames": [
+        "long"
+      ],
+      "elementName": "Long",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter":
 {
+      "pluginNames": [
+        "path"
+      ],
+      "elementName": "Path",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter":
 {
+      "pluginNames": [
+        "pattern"
+      ],
+      "elementName": "Pattern",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter":
 {
+      "pluginNames": [
+        "securityprovider"
+      ],
+      "elementName": "SecurityProvider",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter":
 {
+      "pluginNames": [
+        "short"
+      ],
+      "elementName": "Short",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter":
 {
+      "pluginNames": [
+        "string"
+      ],
+      "elementName": "String",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter":
 {
+      "pluginNames": [
+        "uri"
+      ],
+      "elementName": "URI",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter":
 {
+      "pluginNames": [
+        "url"
+      ],
+      "elementName": "URL",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter":
 {
+      "pluginNames": [
+        "uuid"
+      ],
+      "elementName": "UUID",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.layout.template.json.util.RecyclerFactoryConverter": {
+      "pluginNames": [
+        "recyclerfactoryconverter"
+      ],
+      "elementName": "RecyclerFactoryConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/reflect-config.json
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
similarity index 65%
rename from 
log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/reflect-config.json
rename to 
log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
index a419fe9..d36bb91 100644
--- 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/reflect-config.json
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
@@ -1,37 +1,107 @@
 [
   {
     "name": "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
-    "allDeclaredFields": true
+    "methods": [],
+    "fields": [
+      {
+        "name": "configuration"
+      },
+      {
+        "name": "ignoreExceptions"
+      },
+      {
+        "name": "layout"
+      },
+      {
+        "name": "name"
+      }
+    ]
   },
   {
     "name": 
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
-    "allDeclaredFields": true
+    "methods": [],
+    "fields": [
+      {
+        "name": "bufferSize"
+      },
+      {
+        "name": "bufferedIo"
+      },
+      {
+        "name": "immediateFlush"
+      }
+    ]
   },
   {
-    "name": "org.apache.logging.log4j.core.appender.FileAppender",
-    "queryAllDeclaredMethods": true,
+    "name": "org.apache.logging.log4j.core.appender.ConsoleAppender",
     "methods": [
       {
         "name": "newBuilder",
         "parameterTypes": []
       }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.appender.ConsoleAppender$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "direct"
+      },
+      {
+        "name": "follow"
+      },
+      {
+        "name": "target"
+      }
     ]
   },
   {
-    "name": "org.apache.logging.log4j.core.appender.FileAppender$Builder",
-    "allDeclaredFields": true
+    "name": "org.apache.logging.log4j.core.appender.FileAppender",
+    "methods": [
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.config.AppenderControlArraySet",
+    "name": "org.apache.logging.log4j.core.appender.FileAppender$Builder",
+    "methods": [],
     "fields": [
       {
-        "name": "appenderArray"
+        "name": "advertise"
+      },
+      {
+        "name": "advertiseUri"
+      },
+      {
+        "name": "append"
+      },
+      {
+        "name": "createOnDemand"
+      },
+      {
+        "name": "fileGroup"
+      },
+      {
+        "name": "fileName"
+      },
+      {
+        "name": "fileOwner"
+      },
+      {
+        "name": "filePermissions"
+      },
+      {
+        "name": "locking"
       }
     ]
   },
   {
     "name": "org.apache.logging.log4j.core.config.AppenderRef",
-    "queryAllDeclaredMethods": true,
     "methods": [
       {
         "name": "createAppenderRef",
@@ -41,11 +111,11 @@
           "org.apache.logging.log4j.core.Filter"
         ]
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": "org.apache.logging.log4j.core.config.AppendersPlugin",
-    "queryAllDeclaredMethods": true,
     "methods": [
       {
         "name": "createAppenders",
@@ -53,25 +123,110 @@
           "org.apache.logging.log4j.core.Appender[]"
         ]
       }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggerConfig",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      },
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.lang.String",
+          "org.apache.logging.log4j.Level",
+          "boolean"
+        ]
+      },
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggerConfig$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "additivity"
+      },
+      {
+        "name": "config"
+      },
+      {
+        "name": "filter"
+      },
+      {
+        "name": "includeLocation"
+      },
+      {
+        "name": "level"
+      },
+      {
+        "name": "levelAndRefs"
+      },
+      {
+        "name": "loggerName"
+      },
+      {
+        "name": "properties"
+      },
+      {
+        "name": "refs"
+      }
     ]
   },
   {
     "name": "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger",
-    "queryAllDeclaredMethods": true,
     "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      },
       {
         "name": "newRootBuilder",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.LoggerConfig$RootLogger$Builder",
-    "allDeclaredFields": true
+    "methods": [],
+    "fields": [
+      {
+        "name": "additivity"
+      },
+      {
+        "name": "config"
+      },
+      {
+        "name": "filter"
+      },
+      {
+        "name": "includeLocation"
+      },
+      {
+        "name": "level"
+      },
+      {
+        "name": "levelAndRefs"
+      },
+      {
+        "name": "properties"
+      },
+      {
+        "name": "refs"
+      }
+    ]
   },
   {
     "name": "org.apache.logging.log4j.core.config.LoggersPlugin",
-    "queryAllDeclaredMethods": true,
     "methods": [
       {
         "name": "createLoggers",
@@ -79,7 +234,8 @@
           "org.apache.logging.log4j.core.config.LoggerConfig[]"
         ]
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter",
@@ -88,7 +244,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter",
@@ -97,7 +254,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter",
@@ -106,7 +264,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter",
@@ -115,7 +274,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter",
@@ -124,7 +284,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter",
@@ -133,7 +294,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter",
@@ -142,7 +304,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter",
@@ -151,7 +314,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter",
@@ -160,7 +324,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter",
@@ -169,7 +334,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter",
@@ -178,7 +344,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter",
@@ -187,7 +354,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter",
@@ -196,7 +364,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter",
@@ -205,7 +374,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter",
@@ -214,7 +384,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter",
@@ -223,7 +394,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter",
@@ -232,7 +404,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter",
@@ -241,7 +414,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter",
@@ -250,7 +424,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter",
@@ -259,7 +434,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter",
@@ -268,7 +444,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter",
@@ -277,7 +454,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter",
@@ -286,7 +464,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter",
@@ -295,7 +474,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter",
@@ -304,7 +484,8 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
     "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter",
@@ -313,160 +494,139 @@
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.RequiredValidator",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.NotBlankValidator",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.RequiredValidator",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginBuilderAttributeVisitor",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.ValidHostValidator",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.ValidPortValidator",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginBuilderAttributeVisitor",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
-  },
-  {
-    "name": "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder",
-    "allDeclaredFields": true
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.impl.Log4jContextFactory",
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor",
     "methods": [
       {
         "name": "<init>",
         "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.layout.PatternLayout",
-    "queryAllDeclaredMethods": true,
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor",
     "methods": [
       {
-        "name": "newBuilder",
+        "name": "<init>",
         "parameterTypes": []
       }
-    ]
-  },
-  {
-    "name": "org.apache.logging.log4j.core.layout.PatternLayout$Builder",
-    "allDeclaredFields": true
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.pattern.DatePatternConverter",
-    "queryAllDeclaredMethods": true,
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginLoggerContextVisitor",
     "methods": [
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "java.lang.String[]"
-        ]
+        "name": "<init>",
+        "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.pattern.LevelPatternConverter",
-    "queryAllDeclaredMethods": true,
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor",
     "methods": [
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "java.lang.String[]"
-        ]
+        "name": "<init>",
+        "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": 
"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
-    "queryAllDeclaredMethods": true,
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor",
     "methods": [
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "java.lang.String[]"
-        ]
+        "name": "<init>",
+        "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
-    "queryAllDeclaredMethods": true,
+    "name": "org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory",
     "methods": [
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "java.lang.String[]"
-        ]
+        "name": "<init>",
+        "parameterTypes": []
       }
-    ]
+    ],
+    "fields": []
   },
   {
-    "name": "org.apache.logging.log4j.core.pattern.MessagePatternConverter",
-    "queryAllDeclaredMethods": true,
-    "methods": [
+    "name": "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder",
+    "methods": [],
+    "fields": [
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "org.apache.logging.log4j.core.config.Configuration",
-          "java.lang.String[]"
-        ]
-      }
-    ]
-  },
-  {
-    "name": "org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
-    "queryAllDeclaredMethods": true,
-    "methods": [
+        "name": "filter"
+      },
       {
-        "name": "newInstance",
-        "parameterTypes": [
-          "java.lang.String[]"
-        ]
+        "name": "propertyArray"
       }
     ]
   }
-]
+]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-layout-template-json/reflect-config.json
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-layout-template-json/reflect-config.json
new file mode 100644
index 0000000..b21f60c
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-layout-template-json/reflect-config.json
@@ -0,0 +1,288 @@
+[
+  {
+    "name": "org.apache.logging.log4j.layout.template.json.JsonTemplateLayout",
+    "methods": [
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "charset"
+      },
+      {
+        "name": "configuration"
+      },
+      {
+        "name": "eventDelimiter"
+      },
+      {
+        "name": "eventTemplate"
+      },
+      {
+        "name": "eventTemplateAdditionalFields"
+      },
+      {
+        "name": "eventTemplateRootObjectKey"
+      },
+      {
+        "name": "eventTemplateUri"
+      },
+      {
+        "name": "locationInfoEnabled"
+      },
+      {
+        "name": "maxStringLength"
+      },
+      {
+        "name": "nullEventDelimiterEnabled"
+      },
+      {
+        "name": "recyclerFactory"
+      },
+      {
+        "name": "stackTraceElementTemplate"
+      },
+      {
+        "name": "stackTraceElementTemplateUri"
+      },
+      {
+        "name": "stackTraceEnabled"
+      },
+      {
+        "name": "truncatedStringSuffix"
+      }
+    ]
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$EventTemplateAdditionalField",
+    "methods": [
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.JsonTemplateLayout$EventTemplateAdditionalField$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "format"
+      },
+      {
+        "name": "key"
+      },
+      {
+        "name": "value"
+      }
+    ]
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.CaseConverterResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.CounterResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.EndOfBatchResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.EventAdditionalFieldInterceptor",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.EventRootObjectKeyInterceptor",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.ExceptionResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.ExceptionRootCauseResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.LevelResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.LoggerResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.MainMapResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.MapResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.MarkerResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.MessageParameterResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.MessageResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.SourceResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.ThreadContextDataResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.ThreadContextStackResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.ThreadResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.resolver.TimestampResolverFactory",
+    "methods": [
+      {
+        "name": "getInstance",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.layout.template.json.util.RecyclerFactoryConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  }
+]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
new file mode 100644
index 0000000..ac9efe0
Binary files /dev/null and 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
 differ
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/log4j2.component.properties
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/log4j2.component.properties
new file mode 100644
index 0000000..1f0e193
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl-minimal/resources/log4j2.component.properties
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+##
+log4j2.configurationFile = log4j2-jtl.xml
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl/resources/log4j2.component.properties
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl/resources/log4j2.component.properties
new file mode 100644
index 0000000..1f0e193
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-jtl/resources/log4j2.component.properties
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+##
+log4j2.configurationFile = log4j2-jtl.xml
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/Log4j2Plugins.json
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/Log4j2Plugins.json
new file mode 100644
index 0000000..6da7a86
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/Log4j2Plugins.json
@@ -0,0 +1,747 @@
+{
+  "configurationfactory": {
+    "org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory": {
+      "pluginNames": [
+        "xmlconfigurationfactory"
+      ],
+      "elementName": "XmlConfigurationFactory",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  },
+  "converter": {
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black": {
+      "pluginNames": [
+        "black"
+      ],
+      "elementName": "black",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue": {
+      "pluginNames": [
+        "blue"
+      ],
+      "elementName": "blue",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan": {
+      "pluginNames": [
+        "cyan"
+      ],
+      "elementName": "cyan",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green": {
+      "pluginNames": [
+        "green"
+      ],
+      "elementName": "green",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Magenta": {
+      "pluginNames": [
+        "magenta"
+      ],
+      "elementName": "magenta",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red": {
+      "pluginNames": [
+        "red"
+      ],
+      "elementName": "red",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White": {
+      "pluginNames": [
+        "white"
+      ],
+      "elementName": "white",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Yellow": 
{
+      "pluginNames": [
+        "yellow"
+      ],
+      "elementName": "yellow",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ClassNamePatternConverter": {
+      "pluginNames": [
+        "classnamepatternconverter"
+      ],
+      "elementName": "ClassNamePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.DatePatternConverter": {
+      "pluginNames": [
+        "datepatternconverter"
+      ],
+      "elementName": "DatePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.EncodingPatternConverter": {
+      "pluginNames": [
+        "encode"
+      ],
+      "elementName": "encode",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter": {
+      "pluginNames": [
+        "endofbatchpatternconverter"
+      ],
+      "elementName": "EndOfBatchPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter": {
+      "pluginNames": [
+        "equalsignorecase"
+      ],
+      "elementName": "equalsIgnoreCase",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.EqualsReplacementConverter": {
+      "pluginNames": [
+        "equals"
+      ],
+      "elementName": "equals",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter": 
{
+      "pluginNames": [
+        "extendedthrowablepatternconverter"
+      ],
+      "elementName": "ExtendedThrowablePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.FileLocationPatternConverter": {
+      "pluginNames": [
+        "filelocationpatternconverter"
+      ],
+      "elementName": "FileLocationPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.FullLocationPatternConverter": {
+      "pluginNames": [
+        "fulllocationpatternconverter"
+      ],
+      "elementName": "FullLocationPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.HighlightConverter": {
+      "pluginNames": [
+        "highlight"
+      ],
+      "elementName": "highlight",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.LevelPatternConverter": {
+      "pluginNames": [
+        "levelpatternconverter"
+      ],
+      "elementName": "LevelPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.LineLocationPatternConverter": {
+      "pluginNames": [
+        "linelocationpatternconverter"
+      ],
+      "elementName": "LineLocationPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter": {
+      "pluginNames": [
+        "lineseparatorpatternconverter"
+      ],
+      "elementName": "LineSeparatorPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter": {
+      "pluginNames": [
+        "loggerfqcnpatternconverter"
+      ],
+      "elementName": "LoggerFqcnPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.LoggerPatternConverter": {
+      "pluginNames": [
+        "loggerpatternconverter"
+      ],
+      "elementName": "LoggerPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MapPatternConverter": {
+      "pluginNames": [
+        "mappatternconverter"
+      ],
+      "elementName": "MapPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MarkerPatternConverter": {
+      "pluginNames": [
+        "markerpatternconverter"
+      ],
+      "elementName": "MarkerPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter": {
+      "pluginNames": [
+        "markernamepatternconverter"
+      ],
+      "elementName": "MarkerNamePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MaxLengthConverter": {
+      "pluginNames": [
+        "maxlength"
+      ],
+      "elementName": "maxLength",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MdcPatternConverter": {
+      "pluginNames": [
+        "mdcpatternconverter"
+      ],
+      "elementName": "MdcPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MessagePatternConverter": {
+      "pluginNames": [
+        "messagepatternconverter"
+      ],
+      "elementName": "MessagePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter": {
+      "pluginNames": [
+        "methodlocationpatternconverter"
+      ],
+      "elementName": "MethodLocationPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.NanoTimePatternConverter": {
+      "pluginNames": [
+        "nanotimepatternconverter"
+      ],
+      "elementName": "NanoTimePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.NdcPatternConverter": {
+      "pluginNames": [
+        "ndcpatternconverter"
+      ],
+      "elementName": "NdcPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter": {
+      "pluginNames": [
+        "processidpatternconverter"
+      ],
+      "elementName": "ProcessIdPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.RegexReplacementConverter": {
+      "pluginNames": [
+        "replace"
+      ],
+      "elementName": "replace",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter": {
+      "pluginNames": [
+        "relativetimepatternconverter"
+      ],
+      "elementName": "RelativeTimePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.RepeatPatternConverter": {
+      "pluginNames": [
+        "repeat"
+      ],
+      "elementName": "repeat",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter": {
+      "pluginNames": [
+        "rootthrowablepatternconverter"
+      ],
+      "elementName": "RootThrowablePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter": {
+      "pluginNames": [
+        "sequencenumberpatternconverter"
+      ],
+      "elementName": "SequenceNumberPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.StyleConverter": {
+      "pluginNames": [
+        "style"
+      ],
+      "elementName": "style",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter": {
+      "pluginNames": [
+        "threadidpatternconverter"
+      ],
+      "elementName": "ThreadIdPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter": {
+      "pluginNames": [
+        "threadpatternconverter"
+      ],
+      "elementName": "ThreadPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter": {
+      "pluginNames": [
+        "threadprioritypatternconverter"
+      ],
+      "elementName": "ThreadPriorityPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.ThrowablePatternConverter": {
+      "pluginNames": [
+        "throwablepatternconverter"
+      ],
+      "elementName": "ThrowablePatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.pattern.UuidPatternConverter": {
+      "pluginNames": [
+        "uuidpatternconverter"
+      ],
+      "elementName": "UuidPatternConverter",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter": {
+      "pluginNames": [
+        "notempty"
+      ],
+      "elementName": "notEmpty",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  },
+  "core": {
+    "org.apache.logging.log4j.core.appender.ConsoleAppender": {
+      "pluginNames": [
+        "console"
+      ],
+      "elementName": "appender",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.appender.ConsoleAppender$Builder",
+        
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
+        "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
+        "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.appender.FileAppender": {
+      "pluginNames": [
+        "file"
+      ],
+      "elementName": "appender",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.appender.FileAppender$Builder",
+        
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
+        "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
+        "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.AppenderRef": {
+      "pluginNames": [
+        "appender-ref",
+        "appenderref"
+      ],
+      "elementName": "appender-ref",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.config.AppendersPlugin": {
+      "pluginNames": [
+        "appenders"
+      ],
+      "elementName": "Appenders",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.config.LoggerConfig": {
+      "pluginNames": [
+        "logger"
+      ],
+      "elementName": "Logger",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.config.LoggerConfig$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger": {
+      "pluginNames": [
+        "root"
+      ],
+      "elementName": "Root",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger$Builder"
+      ]
+    },
+    "org.apache.logging.log4j.core.config.LoggersPlugin": {
+      "pluginNames": [
+        "loggers"
+      ],
+      "elementName": "Loggers",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    "org.apache.logging.log4j.core.layout.PatternLayout": {
+      "pluginNames": [
+        "patternlayout"
+      ],
+      "elementName": "layout",
+      "printable": true,
+      "defer": false,
+      "builderHierarchy": [
+        "org.apache.logging.log4j.core.layout.PatternLayout$Builder"
+      ]
+    }
+  },
+  "typeconverter": {
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter":
 {
+      "pluginNames": [
+        "bigdecimal"
+      ],
+      "elementName": "BigDecimal",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter":
 {
+      "pluginNames": [
+        "biginteger"
+      ],
+      "elementName": "BigInteger",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter":
 {
+      "pluginNames": [
+        "boolean"
+      ],
+      "elementName": "Boolean",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter":
 {
+      "pluginNames": [
+        "bytearray"
+      ],
+      "elementName": "ByteArray",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter":
 {
+      "pluginNames": [
+        "byte"
+      ],
+      "elementName": "Byte",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter":
 {
+      "pluginNames": [
+        "characterarray"
+      ],
+      "elementName": "CharacterArray",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter":
 {
+      "pluginNames": [
+        "character"
+      ],
+      "elementName": "Character",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter":
 {
+      "pluginNames": [
+        "charset"
+      ],
+      "elementName": "Charset",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter":
 {
+      "pluginNames": [
+        "class"
+      ],
+      "elementName": "Class",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter":
 {
+      "pluginNames": [
+        "cronexpression"
+      ],
+      "elementName": "CronExpression",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter":
 {
+      "pluginNames": [
+        "double"
+      ],
+      "elementName": "Double",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter":
 {
+      "pluginNames": [
+        "duration"
+      ],
+      "elementName": "Duration",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter":
 {
+      "pluginNames": [
+        "file"
+      ],
+      "elementName": "File",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter":
 {
+      "pluginNames": [
+        "float"
+      ],
+      "elementName": "Float",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter":
 {
+      "pluginNames": [
+        "inetaddress"
+      ],
+      "elementName": "InetAddress",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter":
 {
+      "pluginNames": [
+        "integer"
+      ],
+      "elementName": "Integer",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter":
 {
+      "pluginNames": [
+        "level"
+      ],
+      "elementName": "Level",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter":
 {
+      "pluginNames": [
+        "long"
+      ],
+      "elementName": "Long",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter":
 {
+      "pluginNames": [
+        "path"
+      ],
+      "elementName": "Path",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter":
 {
+      "pluginNames": [
+        "pattern"
+      ],
+      "elementName": "Pattern",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter":
 {
+      "pluginNames": [
+        "securityprovider"
+      ],
+      "elementName": "SecurityProvider",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter":
 {
+      "pluginNames": [
+        "short"
+      ],
+      "elementName": "Short",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter":
 {
+      "pluginNames": [
+        "string"
+      ],
+      "elementName": "String",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter":
 {
+      "pluginNames": [
+        "uri"
+      ],
+      "elementName": "URI",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter":
 {
+      "pluginNames": [
+        "url"
+      ],
+      "elementName": "URL",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    },
+    
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter":
 {
+      "pluginNames": [
+        "uuid"
+      ],
+      "elementName": "UUID",
+      "printable": false,
+      "defer": false,
+      "builderHierarchy": []
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
new file mode 100644
index 0000000..e9991af
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/native-image/org.apache.logging.log4j/log4j-core/reflect-config.json
@@ -0,0 +1,1320 @@
+[
+  {
+    "name": "org.apache.logging.log4j.core.appender.AbstractAppender$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "configuration"
+      },
+      {
+        "name": "ignoreExceptions"
+      },
+      {
+        "name": "layout"
+      },
+      {
+        "name": "name"
+      }
+    ]
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "bufferSize"
+      },
+      {
+        "name": "bufferedIo"
+      },
+      {
+        "name": "immediateFlush"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.appender.ConsoleAppender",
+    "methods": [
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.appender.ConsoleAppender$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "direct"
+      },
+      {
+        "name": "follow"
+      },
+      {
+        "name": "target"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.appender.FileAppender",
+    "methods": [
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.appender.FileAppender$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "advertise"
+      },
+      {
+        "name": "advertiseUri"
+      },
+      {
+        "name": "append"
+      },
+      {
+        "name": "createOnDemand"
+      },
+      {
+        "name": "fileGroup"
+      },
+      {
+        "name": "fileName"
+      },
+      {
+        "name": "fileOwner"
+      },
+      {
+        "name": "filePermissions"
+      },
+      {
+        "name": "locking"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.AppenderRef",
+    "methods": [
+      {
+        "name": "createAppenderRef",
+        "parameterTypes": [
+          "java.lang.String",
+          "org.apache.logging.log4j.Level",
+          "org.apache.logging.log4j.core.Filter"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.AppendersPlugin",
+    "methods": [
+      {
+        "name": "createAppenders",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.Appender[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggerConfig",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      },
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.lang.String",
+          "org.apache.logging.log4j.Level",
+          "boolean"
+        ]
+      },
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggerConfig$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "additivity"
+      },
+      {
+        "name": "config"
+      },
+      {
+        "name": "filter"
+      },
+      {
+        "name": "includeLocation"
+      },
+      {
+        "name": "level"
+      },
+      {
+        "name": "levelAndRefs"
+      },
+      {
+        "name": "loggerName"
+      },
+      {
+        "name": "properties"
+      },
+      {
+        "name": "refs"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggerConfig$RootLogger",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      },
+      {
+        "name": "newRootBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.LoggerConfig$RootLogger$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "additivity"
+      },
+      {
+        "name": "config"
+      },
+      {
+        "name": "filter"
+      },
+      {
+        "name": "includeLocation"
+      },
+      {
+        "name": "level"
+      },
+      {
+        "name": "levelAndRefs"
+      },
+      {
+        "name": "properties"
+      },
+      {
+        "name": "refs"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.LoggersPlugin",
+    "methods": [
+      {
+        "name": "createLoggers",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.LoggerConfig[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.NotBlankValidator",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.RequiredValidator",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.ValidHostValidator",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.validation.validators.ValidPortValidator",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginBuilderAttributeVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginConfigurationVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginLoggerContextVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginNodeVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.config.plugins.visitors.PluginValueVisitor",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.filter.AbstractFilterable$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "filter"
+      },
+      {
+        "name": "propertyArray"
+      }
+    ]
+  },
+  {
+    "name": "org.apache.logging.log4j.core.layout.PatternLayout",
+    "methods": [
+      {
+        "name": "createLayout",
+        "parameterTypes": [
+          "java.lang.String",
+          "org.apache.logging.log4j.core.layout.PatternSelector",
+          "org.apache.logging.log4j.core.config.Configuration",
+          "org.apache.logging.log4j.core.pattern.RegexReplacement",
+          "java.nio.charset.Charset",
+          "boolean",
+          "boolean",
+          "java.lang.String",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newBuilder",
+        "parameterTypes": []
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.layout.PatternLayout$Builder",
+    "methods": [],
+    "fields": [
+      {
+        "name": "alwaysWriteExceptions"
+      },
+      {
+        "name": "charset"
+      },
+      {
+        "name": "configuration"
+      },
+      {
+        "name": "disableAnsi"
+      },
+      {
+        "name": "footer"
+      },
+      {
+        "name": "header"
+      },
+      {
+        "name": "noConsoleNoAnsi"
+      },
+      {
+        "name": "pattern"
+      },
+      {
+        "name": "patternSelector"
+      },
+      {
+        "name": "regexReplacement"
+      }
+    ]
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Magenta",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Yellow",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": [
+          "java.util.List",
+          "java.lang.String"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.ClassNamePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.DatePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.EncodingPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.EqualsReplacementConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "@org.jspecify.annotations.Nullable java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.FileLocationPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.FullLocationPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.HighlightConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.LevelPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.LineLocationPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.MapPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]",
+          "org.apache.logging.log4j.message.MapMessage.MapFormat"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.MarkerPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.MaxLengthConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.MdcPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.MessagePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.NanoTimePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.NdcPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.RegexReplacementConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter",
+    "methods": [
+      {
+        "name": "<init>",
+        "parameterTypes": []
+      },
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.RepeatPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "@org.jspecify.annotations.Nullable java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.StyleConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.ThrowablePatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "@org.jspecify.annotations.Nullable java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": "org.apache.logging.log4j.core.pattern.UuidPatternConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  },
+  {
+    "name": 
"org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter",
+    "methods": [
+      {
+        "name": "newInstance",
+        "parameterTypes": [
+          "org.apache.logging.log4j.core.config.Configuration",
+          "java.lang.String[]"
+        ]
+      }
+    ],
+    "fields": []
+  }
+]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
new file mode 100644
index 0000000..c81c04b
Binary files /dev/null and 
b/log4j-samples-graalvm/src/reachability-metadata/log4j-core-minimal/resources/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat
 differ
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json 
b/log4j-samples-graalvm/src/reachability-metadata/logback/resources/META-INF/native-image/ch.qos.logback/logback-classic/resource-config.json
similarity index 64%
rename from 
log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json
rename to 
log4j-samples-graalvm/src/reachability-metadata/logback/resources/META-INF/native-image/ch.qos.logback/logback-classic/resource-config.json
index 6f02a9c..c80b0a7 100644
--- a/log4j-samples-graalvm/src/reachability-metadata/jul/resource-config.json
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/logback/resources/META-INF/native-image/ch.qos.logback/logback-classic/resource-config.json
@@ -2,7 +2,7 @@
   "resources": {
     "includes": [
       {
-        "pattern": "\\Qlogging.properties\\E"
+        "pattern": "logback\\.xml"
       }
     ]
   },
diff --git a/log4j-samples-graalvm/src/reachability-metadata/minimal/index.json 
b/log4j-samples-graalvm/src/reachability-metadata/minimal/index.json
deleted file mode 100644
index 1f75790..0000000
--- a/log4j-samples-graalvm/src/reachability-metadata/minimal/index.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
-  {
-    "allowed-packages": [
-      "org.apache.logging.log4j.core"
-    ],
-    "directory": "log4j-core",
-    "module": "org.apache.logging.log4j:log4j-core"
-  }
-]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/index.json
 
b/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/index.json
deleted file mode 100644
index 93a3dda..0000000
--- 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/index.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
-  "reflect-config.json",
-  "resource-config.json"
-]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/resource-config.json
 
b/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/resource-config.json
deleted file mode 100644
index dd9527e..0000000
--- 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/2.24.0/resource-config.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "resources": {
-    "includes": [
-      {
-        "pattern": 
"\\QMETA-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat\\E"
-      },
-      {
-        "pattern": 
"\\QMETA-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider\\E"
-      },
-      {
-        "pattern": 
"\\QMETA-INF/services/org.apache.logging.log4j.spi.Provider\\E"
-      },
-      {
-        "pattern": 
"\\QMETA-INF/services/org.apache.logging.log4j.util.PropertySource\\E"
-      },
-      {
-        "pattern": "\\Qlog4j2.xml\\E"
-      }
-    ]
-  },
-  "bundles": []
-}
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/index.json 
b/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/index.json
deleted file mode 100644
index f55d820..0000000
--- 
a/log4j-samples-graalvm/src/reachability-metadata/minimal/log4j-core/index.json
+++ /dev/null
@@ -1,11 +0,0 @@
-[
-  {
-    "latest": true,
-    "metadata-version": "2.24.0",
-    "default-for": "2\\.24\\..*",
-    "module": "org.apache.logging.log4j:log4j-core",
-    "tested-versions": [
-      "2.24.0-SNAPSHOT"
-    ]
-  }
-]
\ No newline at end of file
diff --git 
a/log4j-samples-graalvm/src/reachability-metadata/simple/resources/log4j2.component.properties
 
b/log4j-samples-graalvm/src/reachability-metadata/simple/resources/log4j2.component.properties
new file mode 100644
index 0000000..3a3f6f3
--- /dev/null
+++ 
b/log4j-samples-graalvm/src/reachability-metadata/simple/resources/log4j2.component.properties
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+##
+# Opt-in to use Simple Logger
+log4j.provider = org.apache.logging.log4j.simple.internal.SimpleProvider

Reply via email to