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 · 12 comments
Closed

Add GraalVM native compilation support #1539

okboyone opened this issue Jul 5, 2023 · 12 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 [email protected]/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 [email protected]/java.lang.Class.getConstructor0(DynamicHub.java:3585)
at [email protected]/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 [email protected]/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 [email protected]/java.lang.Class.getConstructor0(DynamicHub.java:3585)
at [email protected]/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 [email protected]/java.lang.invoke.MemberName.makeAccessException(MemberName.java:910)
        at [email protected]/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:989)
        at [email protected]/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:3762)
        at [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/java.util.ServiceLoader.fail(ServiceLoader.java:589)
        at [email protected]/java.util.ServiceLoader.checkCaller(ServiceLoader.java:575)
        at [email protected]/java.util.ServiceLoader.<init>(ServiceLoader.java:503)
        at [email protected]/java.util.ServiceLoader.load(ServiceLoader.java:1646)
        at [email protected]/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 [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:96)
        at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0)
        at [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/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
@chia7712
Copy link
Member

Since logging-log4j-samples has a test suite for GraalVM support, which passes for version 2.25.0-SNAPSHOT

Pardon me, does "log4j2 2.25.0-SNAPSHOT" indicate that log4j2 can be used with GraalVM without requiring any modifications to the user code? I am currently testing Kafka with log4j2 under GraalVM (apache/kafka#18872) and encountered the following error. While I haven't investigated it thoroughly, it appears that the issue might be resolved by the changes in #3053?

Please correct me if I misunderstand anything, and thanks for you to keep updating log4j2.

2025-02-17T17:47:33.068964Z main ERROR Unrecognized format specifier [d] 2025-02-17T17:47:33.069017Z main ERROR Unrecognized conversion specifier [d] starting at position 16 in conversion pattern. 2025-02-17T17:47:33.069029Z main

@vy
Copy link
Member

vy commented Feb 17, 2025

Pardon me, does "log4j2 2.25.0-SNAPSHOT" indicate that log4j2 can be used with GraalVM without requiring any modifications to the user code? I am currently testing Kafka with log4j2 under GraalVM (apache/kafka#18872) and encountered the following error. While I haven't investigated it thoroughly, it appears that the issue might be resolved by the changes in #3053?

Correct. You can even look at the Log4j GraalVM guide of the upcoming release.

Please correct me if I misunderstand anything, and thanks for you to keep updating log4j2.

2025-02-17T17:47:33.068964Z main ERROR Unrecognized format specifier [d] 2025-02-17T17:47:33.069017Z main ERROR Unrecognized conversion specifier [d] starting at position 16 in conversion pattern. 2025-02-17T17:47:33.069029Z main

It indeed looks like the associated PatternConverter is not discovered. Would you mind giving the most recent 2.25.0-SNAPSHOT a try using the Log4j GraalVM guide, and updating us on the outcome, please?

@chia7712
Copy link
Member

@vy thanks for your response.

It indeed looks like the associated PatternConverter is not discovered. Would you mind giving the most recent 2.25.0-SNAPSHOT a try using the Log4j GraalVM guide, and updating us on the outcome, please?

I have tested the 2.25.0-SNAPSHOT locally, and it successfully resolves the error. However, since we are preparing for the next release, I'm exploring alternative/simple solutions to address the issue while using log4j2 2.24.

@ppkarwasz
Copy link
Contributor

@chia7712,

Pardon me, does "log4j2 2.25.0-SNAPSHOT" indicate that log4j2 can be used with GraalVM without requiring any modifications to the user code?

To be precise, starting with 2.25.0 you will be able to use Log4j Core without any modification to your Gradle/Maven Native Plugin configuration.

You can also use any version of Log4j Core with GraalVM if you provide an appropriate reflect-config.json in a subfolder of the META-INF/native-image directory of your application. We have some examples of this procedure in the log4j-samples-graalvm example project. In some of the Maven profiles, we add a profile-specific resources folder.

You can extract the appropriate reflect-config.json file from the 2.25.0 snapshots and add it to your application.

@chia7712
Copy link
Member

@ppkarwasz thanks for all your response.

You can extract the appropriate reflect-config.json file from the 2.25.0 snapshots and add it to your application.

Yes, you are right. We have added the reflective-config.json to fix the issue. apache/kafka#18872 (comment)

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

5 participants