linghengqian commented on issue #1539:
URL: 
https://github.com/apache/logging-log4j2/issues/1539#issuecomment-2267307774

   # TL;DR
   - I came from 
https://github.com/apache/logging-log4j2/issues/2791#issuecomment-2264663738 . 
I just record GRM here because 
https://github.com/oracle/graalvm-reachability-metadata/issues/50 was closed by 
Spring Team, and I have no intention to update a closed issue. 
https://github.com/oracle/graalvm-reachability-metadata/issues/50 has caused a 
lot of misunderstandings, one of which is that Log4j2 is not supported under 
GraalVM Native Image. 
   - I semi-automatically collected the required GraalVM Reachability Metadata 
for `org.apache.logging.log4j:log4j-api:2.18.0` in 
https://github.com/apache/shardingsphere/pull/31526. Since there are more than 
a dozen external issues involving apache/hive in 
https://github.com/apache/shardingsphere/pull/31526, the PR content may change 
at any time, so I make additional records in the current issue.
   <details>
   
   <summary>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🙌</summary>
   
   ```json
   [
   {
     
"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
   }
   ]
   ```
   
   </details>
   
   <details>
   
   <summary>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🙌</summary>
   
   ```json
   {
     "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"]
     }]
   }
   ```
   
   </details>
   
   # 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
   ```
   - Initially, I excluded all Log4j2 related dependencies for HiveServer2 JDBC 
Driver as requested by https://github.com/apache/shardingsphere/pull/31526 side 
as https://github.com/oracle/graalvm-reachability-metadata/issues/50, since 
Log4j2 apparently lacks GraalVM Reachability Metadata. Part of the early 
investigation is documented at 
https://github.com/apache/shardingsphere/issues/32377 and 
https://github.com/apache/shardingsphere/issues/29052.
   
   <details>
   
   <summary>Initial processing on the apache/shardingsphere side🙌</summary>
   
   ```xml
    <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>
   ```
   </details>
   
   - 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.
   
   ```json
   {
     
"condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"},
     "name":"java.util.ServiceLoader",
     "allPublicMethods":true
   }
   ```
   
   <details>
   
   <summary>Warning Log related to ` java.lang.NoSuchMethodException: no such 
method: 
java.util.ServiceLoader.load(Class,ClassLoader)ServiceLoader/invokeStatic`🙌</summary>
   
   ```shell
   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)
   ```
   
   </details>
   
   - For the following Warning Log, this seems to be a bug of Log4j2, which 
does not prevent the use of log4j2 under nativeTest.
   
   <details>
   
   <summary>Warning Log related to ` java.util.ServiceConfigurationError: 
org.apache.logging.log4j.spi.Provider: module org.graalvm.nativeimage.builder 
does not declare `uses``🙌</summary>
   
   ```shell
   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...
   ```
   
   </details>
   
   # Controversy in StackoverFlow about `com.sun.jmx.mbeanserver.JmxMBeanServer`
   
   - 
https://stackoverflow.com/questions/76556941/graalvm-native-image-does-not-support-mbean-server
 also claims that Log4j2 cannot run under GraalVM Native Image, and gives the 
log related to `com.sun.jmx.mbeanserver.JmxMBeanServer`. I also saw a similar 
error log at https://github.com/apache/shardingsphere/pull/31526 . 
   
   <details>
   
   <summary>Error Log🙌</summary>
   
   ```shell
   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
   
   ```
   </details>
   
   - 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`.
   <details>
   
   <summary>Hi, I am a class of `io.grpc:grpc-netty-shaded`🙌</summary>
   
   ```shell
   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
   ```
   </details>
   
   - I don’t want to discuss here what the GRM for `io.grpc:grpc-netty-shaded` 
should look like, that discussion should be put in 
https://github.com/oracle/graalvm-reachability-metadata/issues/377 or 
https://github.com/grpc/grpc-java/issues/10601 . On the apache/shardingsphere 
side, I fixed nativeTest using a non-generic GRM as follows.
   
   <details>
   
   <summary>`native-image.properties` of `io.grpc:grpc-netty-shaded`🙌</summary>
   
   ```properties
   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
   ```
   </details>
   
   # 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`.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to