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]
