Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GraalVM native compilation support #1539

Closed
okboyone opened this issue Jul 5, 2023 · 7 comments
Closed

Add GraalVM native compilation support #1539

okboyone opened this issue Jul 5, 2023 · 7 comments
Labels
enhancement Additions or updates to features

Comments

@okboyone
Copy link

okboyone commented Jul 5, 2023

Description

[A clear and concise description of what the bug is.]

Configuration

Version: spring-boot-starter-log4j2 2.20
**Operating system:windows11

**JDK:**jdk17
springboot3

Logs

Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.logging.slf4j.Log4jMarkerFactory.(Log4jMarkerFactory.java:36)
at org.apache.logging.slf4j.SLF4JServiceProvider.initialize(SLF4JServiceProvider.java:53)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:183)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
at org.springframework.boot.SpringApplication.(SpringApplication.java:185)
at com.benfei.ChangAnRefuelApplication.main(ChangAnRefuelApplication.java:16)
Caused by: java.lang.IllegalStateException: java.lang.InstantiationException: org.apache.logging.log4j.message.DefaultFlowMessageFactory
at org.apache.logging.log4j.spi.AbstractLogger.createDefaultFlowMessageFactory(AbstractLogger.java:242)
at org.apache.logging.log4j.spi.AbstractLogger.(AbstractLogger.java:141)
at org.apache.logging.log4j.status.StatusLogger.(StatusLogger.java:141)
at org.apache.logging.log4j.status.StatusLogger.(StatusLogger.java:91)
... 12 more
Caused by: java.lang.InstantiationException: org.apache.logging.log4j.message.DefaultFlowMessageFactory
at java.base@17.0.7/java.lang.Class.newInstance(DynamicHub.java:639)
at org.apache.logging.log4j.spi.AbstractLogger.createDefaultFlowMessageFactory(AbstractLogger.java:240)
... 15 more
Caused by: java.lang.NoSuchMethodException: org.apache.logging.log4j.message.DefaultFlowMessageFactory.()
at java.base@17.0.7/java.lang.Class.getConstructor0(DynamicHub.java:3585)
at java.base@17.0.7/java.lang.Class.newInstance(DynamicHub.java:626)
... 16 more

E:\flutterwork\BootDemo>E:\flutterwork\BootDemo\target\boot-test.exe
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.logging.slf4j.Log4jMarkerFactory.(Log4jMarkerFactory.java:36)
at org.apache.logging.slf4j.SLF4JServiceProvider.initialize(SLF4JServiceProvider.java:53)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:183)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
at org.springframework.boot.SpringApplication.(SpringApplication.java:185)
at com.benfei.ChangAnRefuelApplication.main(ChangAnRefuelApplication.java:16)
Caused by: java.lang.IllegalStateException: java.lang.InstantiationException: org.apache.logging.log4j.message.DefaultFlowMessageFactory
at org.apache.logging.log4j.spi.AbstractLogger.createDefaultFlowMessageFactory(AbstractLogger.java:242)
at org.apache.logging.log4j.spi.AbstractLogger.(AbstractLogger.java:141)
at org.apache.logging.log4j.status.StatusLogger.(StatusLogger.java:141)
at org.apache.logging.log4j.status.StatusLogger.(StatusLogger.java:91)
... 12 more
Caused by: java.lang.InstantiationException: org.apache.logging.log4j.message.DefaultFlowMessageFactory
at java.base@17.0.7/java.lang.Class.newInstance(DynamicHub.java:639)
at org.apache.logging.log4j.spi.AbstractLogger.createDefaultFlowMessageFactory(AbstractLogger.java:240)
... 15 more
Caused by: java.lang.NoSuchMethodException: org.apache.logging.log4j.message.DefaultFlowMessageFactory.()
at java.base@17.0.7/java.lang.Class.getConstructor0(DynamicHub.java:3585)
at java.base@17.0.7/java.lang.Class.newInstance(DynamicHub.java:626)
... 16 more

@vy
Copy link
Member

vy commented Jul 6, 2023

Log4j 2 doesn't support native compilation using GraalVM yet, see LOG4J2-2649. You are more than welcome to work on this feature and contribute it.

@vy vy closed this as completed Jul 6, 2023
@vy vy added the duplicate Pull requests or issues with another instance elsewhere label Jul 6, 2023
@ppkarwasz ppkarwasz changed the title After using mvn -Pnative native:compile to build, the execution program reported an error Add GraalVM native compilation support Mar 6, 2024
@ppkarwasz ppkarwasz added enhancement Additions or updates to features and removed duplicate Pull requests or issues with another instance elsewhere labels Mar 6, 2024
@ppkarwasz
Copy link
Contributor

I marked the original JIRA issue LOG4J2-2649 as duplicate of this one, since JIRA registrations are closed now.

@ppkarwasz
Copy link
Contributor

This is partially solved in #2392: this PR eliminates the usage of Java 8 features not supported by GraalVM.

After the release of 2.24.0 users will be able to use GraalVM if they generate reachability metadata themselves.

@linghengqian
Copy link
Member

TL;DR

For GraalVM CE For JDK 22.0.2, the required `reflect-config.json` for `org.apache.logging.log4j:log4j-api:2.18.0` is as follows🙌
[
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.AsyncAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.ConsoleAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.DailyRollingFileAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.EnhancedRollingFileAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.FileAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.NullAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.RewriteAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.RollingFileAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.SocketAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.appender.SyslogAppenderBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.filter.DenyAllFilterBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.filter.LevelMatchFilterBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.filter.LevelRangeFilterBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.filter.StringMatchFilterBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.layout.HtmlLayoutBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.layout.PatternLayoutBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.layout.SimpleLayoutBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.layout.TTCCLayoutBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.layout.XmlLayoutBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.rolling.CompositeTriggeringPolicyBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.rolling.SizeBasedTriggeringPolicyBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.builders.rolling.TimeBasedRollingPolicyBuilder"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.log4j.config.PropertiesConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.config.PropertiesConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.layout.Log4j1SyslogLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.layout.Log4j1XmlLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.pattern.Log4j1LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.pattern.Log4j1MdcPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.pattern.Log4j1NdcPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.log4j.xml.XmlConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.log4j.xml.XmlConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.AppenderSet"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.AsyncAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.ConsoleAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.CountingNoOpAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.FailoverAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.FailoversPlugin"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.FileAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.HttpAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.MemoryMappedFileAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.NullAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.OutputStreamAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.RandomAccessFileAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.RollingFileAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.ScriptAppenderSelector"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.SmtpAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.SocketAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.SyslogAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.WriterAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.ColumnMapping"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfig"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.mom.JmsAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.nosql.NoSqlAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rewrite.PropertiesRewritePolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rewrite.RewriteAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.CronTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.DirectWriteRolloverStrategy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.NoOpTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.DeleteAction"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileCount"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileSize"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAll"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfAny"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfFileName"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfLastModified"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.IfNot"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.rolling.action.ScriptCondition"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.routing.Route"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.routing.Routes"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.appender.routing.RoutingAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig$RootLogger"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.AsyncWaitStrategyFactoryConfig"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.DisruptorBlockingQueueFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.JCToolsBlockingQueueFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.async.LinkedTransferQueueFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AppenderControlArraySet"},
  "name":"org.apache.logging.log4j.core.config.AppenderControlArraySet",
  "fields":[{"name":"appenderArray"}]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.AppenderRef"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.AppendersPlugin"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.CustomLevelConfig"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.CustomLevels"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.DefaultAdvertiser"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.HttpWatcher"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.LoggerConfig"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.LoggerConfig$RootLogger"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.LoggersPlugin"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.PropertiesPlugin"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.Property"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.ScriptsPlugin"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.arbiters.ClassArbiter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.arbiters.DefaultArbiter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.arbiters.ScriptArbiter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.arbiters.SelectArbiter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.arbiters.SystemPropertyArbiter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
  "name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.BurstFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.CompositeFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.DenyAllFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.DynamicThresholdFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.LevelMatchFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.LevelRangeFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.MapFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.MarkerFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.MutableThreadContextMapFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.NoMarkerFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.RegexFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.ScriptFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.StringMatchFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.StructuredDataFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.ThreadContextMapFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.ThresholdFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.filter.TimeFilter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.LogManager"},
  "name":"org.apache.logging.log4j.core.impl.Log4jContextFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
  "name":"org.apache.logging.log4j.core.impl.Log4jProvider"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"},
  "name":"org.apache.logging.log4j.core.impl.ThreadContextDataProvider"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.AppenderAdmin",
  "queryAllPublicConstructors":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.AppenderAdminMBean",
  "queryAllPublicMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdmin",
  "queryAllPublicConstructors":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdminMBean",
  "queryAllPublicMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.LoggerContextAdmin",
  "queryAllPublicConstructors":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean",
  "queryAllPublicMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdmin",
  "queryAllPublicConstructors":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
  "name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdminMBean",
  "queryAllPublicMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.CsvLogEventLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.CsvParameterLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.GelfLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.HtmlLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.JsonLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.LevelPatternSelector"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.LoggerFields"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.MarkerPatternSelector"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.MessageLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.PatternLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.PatternMatch"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.Rfc5424Layout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.ScriptPatternSelector"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.SerializedLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.SyslogLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.XmlLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.layout.YamlLayout"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.ContextMapLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.ContextMapLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.DateLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.DateLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.EventLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.EventLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.JavaLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.JavaLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.JndiLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.Log4jLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.Log4jLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.LowerLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.LowerLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.MainMapLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.MainMapLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.MapLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.MapLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.MarkerLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.MarkerLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.lookup.UpperLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.core.lookup.UpperLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.MulticastDnsAdvertiser"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.SocketAddress"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.SocketOptions"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.SocketPerformancePreferences"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.ssl.SslConfiguration"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Magenta"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Yellow"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ClassNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.EncodingPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.EqualsReplacementConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.FileDatePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.FileLocationPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.FullLocationPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.HighlightConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.IntegerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.LineLocationPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MapPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MarkerPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MaxLengthConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MdcPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["org.apache.logging.log4j.core.config.Configuration","java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.NanoTimePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.NdcPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.RegexReplacement"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.RegexReplacementConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.RepeatPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.StyleConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
  "queryAllDeclaredMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
  "methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.ThrowablePatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.UuidPatternConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.script.Script"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.script.ScriptFile"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.script.ScriptRef"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.core.util.KeyValuePair"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"},
  "name":"org.apache.logging.log4j.message.DefaultFlowMessageFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"},
  "name":"org.apache.logging.log4j.message.ParameterizedMessageFactory",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
  "name":"org.apache.logging.log4j.util.EnvironmentPropertySource"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
  "name":"org.apache.logging.log4j.util.SystemPropertiesPropertySource"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.SortedArrayStringMap"},
  "name":"org.apache.logging.log4j.util.internal.DefaultObjectInputFilter",
  "queryAllPublicMethods":true
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.web.WebLookup"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
  "name":"org.apache.logging.log4j.web.WebLookup",
  "methods":[{"name":"<init>","parameterTypes":[] }]
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
  "name":"org.apache.logging.log4j.web.appender.ServletAppender"
},
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"},
  "name":"java.util.ServiceLoader",
  "allPublicMethods":true
}
]
For GraalVM CE For JDK 22.0.2, the required `resource-config.json` for `org.apache.logging.log4j:log4j-api:2.18.0` is as follows🙌
{
  "resources":{
  "includes":[{
    "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
    "pattern":"\\QMETA-INF/log4j-provider.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
    "pattern":"\\QMETA-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
    "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"},
    "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.WatchManager"},
    "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.WatchEventService\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
    "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.spi.Provider\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
    "pattern":"\\QMETA-INF/services/org.apache.logging.log4j.util.PropertySource\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.jsn\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.json\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.xml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.yaml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test.yml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.jsn\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.json\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.xml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.yaml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2-test2626b418.yml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"},
    "pattern":"\\Qlog4j2.StatusLogger.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"},
    "pattern":"\\Qlog4j2.component.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.jsn\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.json\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
    "pattern":"\\Qlog4j2.system.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.xml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.yaml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j2.yml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.jsn\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.json\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.properties\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.xml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.yaml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
    "pattern":"\\Qlog4j22626b418.yml\\E"
  }, {
    "condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
    "pattern":"jdk.jfr:\\Qjdk/jfr/internal/query/view.ini\\E"
  }]},
  "bundles":[{
    "name":"sun.util.resources.cldr.CalendarData",
    "locales":["und"]
  }]
}

Controversy in history

  • The above GRM is not obtained and organized from the unit test for Log4j2, but extracted from the unit test for HiveServer2 JDBC Driver on the apache/shardingsphere side. HiveServer2 JDBC Driver relies on a lot of logging dependencies in the compile scope.
commons-logging:commons-logging:1.2
org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1
org.jboss.logging:jboss-logging:3.1.3.GA
org.apache.logging.log4j:log4j-1.2-api:2.18.0
org.apache.logging.log4j:log4j-api:2.18.0
org.apache.logging.log4j:log4j-core:2.18.0
org.apache.logging.log4j:log4j-slf4j-impl:2.18.0
org.apache.logging.log4j:log4j-web:2.18.0
log4j:log4j:1.2.17
org.slf4j:slf4j-log4j12:1.7.25
Initial processing on the apache/shardingsphere side🙌
 <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-service</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.logging.log4j</groupId>
                    <artifactId>log4j-slf4j-impl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • With the addition of GRM, issues around using Log4j2 under GraalVM Native Image were resolved. For the following Warning Log under GraalVM Native Image, there are the following GRM entries to solve it.
{
  "condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"},
  "name":"java.util.ServiceLoader",
  "allPublicMethods":true
}
Warning Log related to ` java.lang.NoSuchMethodException: no such method: java.util.ServiceLoader.load(Class,ClassLoader)ServiceLoader/invokeStatic`🙌
ERROR StatusLogger Unable to load services for service class org.apache.logging.log4j.spi.Provider
 java.lang.NoSuchMethodException: no such method: java.util.ServiceLoader.load(Class,ClassLoader)ServiceLoader/invokeStatic
        at java.base@22.0.2/java.lang.invoke.MemberName.makeAccessException(MemberName.java:910)
        at java.base@22.0.2/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:989)
        at java.base@22.0.2/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:3762)
        at java.base@22.0.2/java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:2660)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadClassloaderServices(ServiceLoaderUtil.java:90)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:74)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:68)
        at org.apache.logging.log4j.util.ProviderUtil.<init>(ProviderUtil.java:67)
        at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:145)
        at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:129)
        at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:90)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
        at org.apache.curator.test.DirectoryUtils.<clinit>(DirectoryUtils.java:35)
        at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:203)
        at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:111)
        at org.apache.curator.test.TestingServer.<init>(TestingServer.java:97)
        at org.apache.curator.test.TestingServer.<init>(TestingServer.java:43)
        at org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest.assertShardingInLocalTransactions(ZookeeperTest.java:66)
        at java.base@22.0.2/java.lang.reflect.Method.invoke(Method.java:580)
        at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
        at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
        at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
        at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
        at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at java.base@22.0.2/java.util.ArrayList.forEach(ArrayList.java:1597)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at java.base@22.0.2/java.util.ArrayList.forEach(ArrayList.java:1597)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
        at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
        at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
        at org.graalvm.junit.platform.NativeImageJUnitLauncher.execute(NativeImageJUnitLauncher.java:74)
        at org.graalvm.junit.platform.NativeImageJUnitLauncher.main(NativeImageJUnitLauncher.java:129)
        at java.base@22.0.2/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
  • For the following Warning Log, this seems to be a bug of Log4j2, which does not prevent the use of log4j2 under nativeTest.
Warning Log related to ` java.util.ServiceConfigurationError: org.apache.logging.log4j.spi.Provider: module org.graalvm.nativeimage.builder does not declare `uses``🙌
ERROR StatusLogger Unable to load services for service class org.apache.logging.log4j.spi.Provider
 java.util.ServiceConfigurationError: org.apache.logging.log4j.spi.Provider: module org.graalvm.nativeimage.builder does not declare `uses`
        at java.base@22.0.2/java.util.ServiceLoader.fail(ServiceLoader.java:589)
        at java.base@22.0.2/java.util.ServiceLoader.checkCaller(ServiceLoader.java:575)
        at java.base@22.0.2/java.util.ServiceLoader.<init>(ServiceLoader.java:503)
        at java.base@22.0.2/java.util.ServiceLoader.load(ServiceLoader.java:1646)
        at java.base@22.0.2/java.lang.reflect.Method.invoke(Method.java:580)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:253)
        at java.base@22.0.2/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:96)
        at java.base@22.0.2/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0)
        at java.base@22.0.2/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadClassloaderServices(ServiceLoaderUtil.java:91)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:74)
        at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:68)
        at org.apache.logging.log4j.util.ProviderUtil.<init>(ProviderUtil.java:67)
        at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:145)
        at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:129)
        at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:90)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
        at org.apache.curator.test.DirectoryUtils.<clinit>(DirectoryUtils.java:35)
        at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:203)
        at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:111)
        at org.apache.curator.test.TestingServer.<init>(TestingServer.java:97)
        at org.apache.curator.test.TestingServer.<init>(TestingServer.java:43)
        at org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest.assertShardingInLocalTransactions(ZookeeperTest.java:66)
        at java.base@22.0.2/java.lang.reflect.Method.invoke(Method.java:580)
        at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
        at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
        at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
        at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
        at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
        at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
        at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at java.base@22.0.2/java.util.ArrayList.forEach(ArrayList.java:1597)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at java.base@22.0.2/java.util.ArrayList.forEach(ArrayList.java:1597)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
        at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
        at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
        at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
        at org.graalvm.junit.platform.NativeImageJUnitLauncher.execute(NativeImageJUnitLauncher.java:74)
        at org.graalvm.junit.platform.NativeImageJUnitLauncher.main(NativeImageJUnitLauncher.java:129)
        at java.base@22.0.2/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

Controversy in StackoverFlow about com.sun.jmx.mbeanserver.JmxMBeanServer

Error Log🙌
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.

You now have two options to resolve this:

1) If it is intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, add 

    '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer'

to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'com.sun.jmx.mbeanserver.JmxMBeanServer' to see if they are safe for build-time initialization,  and that they do not contain any sensitive data that should not become part of the image.

2) If these objects should not be stored in the image heap, you can use 

    '--trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer'

to find classes that instantiate these objects. Once you found such a class, you can mark it explicitly for run time initialization with 

    '--initialize-at-run-time=<culprit>'

to prevent the instantiation of the object.

If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
To fix this, include '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.

The following detailed trace displays from which field in the code the object was reached.
Object was reached by
  manually created constant
  • The original issue is complete nonsense, because with GraalVM CE For JDK22, users can even connect to the GraalVM Native Image using JMX in JDK Mission Control. If you add --trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer to the buildArg when building the GraalVM Native Image, you will see that the Error Log is actually caused by io.grpc:grpc-netty-shaded.
Hi, I am a class of `io.grpc:grpc-netty-shaded`🙌
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.

You now have two options to resolve this:

1) If it is intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, add 

    '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer'

to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'com.sun.jmx.mbeanserver.JmxMBeanServer' to see if they are safe for build-time initialization,  and that they do not contain any sensitive data that should not become part of the image.

2) If if it is not intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, examine the stack trace and use 

    '--initialize-at-run-time=io.grpc.netty.shaded.io.netty.channel.AbstractChannel'

to prevent instantiation of the culprit object.
The culprit object has been instantiated by the 'io.grpc.netty.shaded.io.netty.channel.AbstractChannel' class initializer with the following trace:
        at com.sun.jmx.mbeanserver.JmxMBeanServer.<init>(JmxMBeanServer.java:225)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.newMBeanServer(JmxMBeanServer.java:1437)
        at javax.management.MBeanServerBuilder.newMBeanServer(MBeanServerBuilder.java:110)
        at javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:329)
        at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:231)
        at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:192)
        at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:487)
        at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:632)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:694)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:137)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:55)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.Slf4JLoggerFactory.newInstance(Slf4JLoggerFactory.java:49)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.useSlf4JLoggerFactory(InternalLoggerFactory.java:63)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.newDefaultFactory(InternalLoggerFactory.java:42)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getDefaultFactory(InternalLoggerFactory.java:111)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:134)
        at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:127)
        at io.grpc.netty.shaded.io.netty.channel.AbstractChannel.<clinit>(AbstractChannel.java:45)

If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
To fix this, include '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.

The following detailed trace displays from which field in the code the object was reached.
Object was reached by
  manually created constant
`native-image.properties` of `io.grpc:grpc-netty-shaded`🙌
Args=--initialize-at-run-time=\
    io.grpc.netty.shaded.io.netty.channel.ChannelHandlerMask,\
    io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioChannel,\
    io.grpc.netty.shaded.io.netty.channel.socket.nio.SelectorProviderUtil,\
    io.grpc.netty.shaded.io.netty.util.concurrent.DefaultPromise,\
    io.grpc.netty.shaded.io.netty.util.internal.MacAddressUtil,\
    io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil,\
    io.grpc.netty.shaded.io.netty.util.NetUtilInitializations,\
    io.grpc.netty.shaded.io.netty.channel.AbstractChannel,\
    io.grpc.netty.shaded.io.netty.util.NetUtil,\
    io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent,\
    io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0,\
    io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline,\
    io.grpc.netty.shaded.io.netty.channel.DefaultChannelId,\
    io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector,\
    io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext,\
    io.grpc.netty.shaded.io.netty.channel.ChannelOutboundBuffer,\
    io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap,\
    io.grpc.netty.shaded.io.netty.util.internal.CleanerJava9,\
    io.grpc.netty.shaded.io.netty.util.internal.StringUtil,\
    io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6,\
    io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil$HexUtil,\
    io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator,\
    io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalThread,\
    io.grpc.netty.shaded.io.netty.buffer.PoolArena,\
    io.grpc.netty.shaded.io.netty.buffer.EmptyByteBuf,\
    io.grpc.netty.shaded.io.netty.buffer.PoolThreadCache,\
    io.grpc.netty.shaded.io.netty.util.AttributeKey

Summary

  • After some interesting exploration, apache/shardingsphere can use HiveServer2 JDBC Driver under GraalVM Native Image without excluding org.apache.logging.log4j:log4j-api:2.18.0.

@ppkarwasz
Copy link
Contributor

While version 2.24.0 should have solved the problems reported with Log4j API, #3053 solves it for Log4j Core.

@okboyone, could you check if the current 2.25.0-SNAPSHOT solves your problems? The URL of our snapshot report are available on our download page.

@ppkarwasz ppkarwasz added the waiting-for-user More information is needed from the user label Oct 4, 2024
Copy link

github-actions bot commented Dec 4, 2024

This issue is stale because it has been waiting for your feedback for more than 60 days. The Apache Logging Services community values every submitted issue, but without additional information from you, we are unable to provide a solution to your problem.
Please comment on this issue or it will be closed in 7 days.

@github-actions github-actions bot added the Stale label Dec 4, 2024
@ppkarwasz
Copy link
Contributor

Since logging-log4j-samples has a test suite for GraalVM support, which passes for version 2.25.0-SNAPSHOT (see log4j-samples-graalvm, I am closing this issue.

@ppkarwasz ppkarwasz removed waiting-for-user More information is needed from the user Stale labels Dec 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Additions or updates to features
Projects
None yet
Development

No branches or pull requests

4 participants