logging-log4j2
logging-log4j2 copied to clipboard
Add GraalVM native compilation support
Description
[A clear and concise description of what the bug is.]
Configuration
Version: spring-boot-starter-log4j2 2.20 **Operating system:windows11
**JDK:**jdk17 springboot3
Logs
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.logging.slf4j.Log4jMarkerFactory.
E:\flutterwork\BootDemo>E:\flutterwork\BootDemo\target\boot-test.exe
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.logging.slf4j.Log4jMarkerFactory.
Log4j 2 doesn't support native compilation using GraalVM yet, see LOG4J2-2649. You are more than welcome to work on this feature and contribute it.
I marked the original JIRA issue LOG4J2-2649 as duplicate of this one, since JIRA registrations are closed now.
This is partially solved in #2392: this PR eliminates the usage of Java 8 features not supported by GraalVM.
After the release of 2.24.0 users will be able to use GraalVM if they generate reachability metadata themselves.
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.0in 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.
For GraalVM CE For JDK 22.0.2, the required `reflect-config.json` for `org.apache.logging.log4j:log4j-api:2.18.0` is as follows🙌
[
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.AsyncAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.ConsoleAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.DailyRollingFileAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.EnhancedRollingFileAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.FileAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.NullAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.RewriteAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.RollingFileAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.SocketAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.appender.SyslogAppenderBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.filter.DenyAllFilterBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.filter.LevelMatchFilterBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.filter.LevelRangeFilterBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.filter.StringMatchFilterBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.layout.HtmlLayoutBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.layout.PatternLayoutBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.layout.SimpleLayoutBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.layout.TTCCLayoutBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.layout.XmlLayoutBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.rolling.CompositeTriggeringPolicyBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.rolling.SizeBasedTriggeringPolicyBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.builders.rolling.TimeBasedRollingPolicyBuilder"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.log4j.config.PropertiesConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.config.PropertiesConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.layout.Log4j1SyslogLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.layout.Log4j1XmlLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.pattern.Log4j1LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.pattern.Log4j1MdcPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.pattern.Log4j1NdcPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.log4j.xml.XmlConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.log4j.xml.XmlConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.AppenderSet"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.AsyncAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.ConsoleAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.CountingNoOpAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.FailoverAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.FailoversPlugin"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.FileAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.HttpAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.MemoryMappedFileAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.NullAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.OutputStreamAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.RandomAccessFileAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.RollingFileAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.ScriptAppenderSelector"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.SmtpAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.SocketAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.SyslogAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.WriterAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.ColumnMapping"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfig"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.mom.JmsAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.nosql.NoSqlAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rewrite.PropertiesRewritePolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rewrite.RewriteAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.CronTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.DirectWriteRolloverStrategy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.NoOpTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.DeleteAction"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileCount"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileSize"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfAll"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfAny"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfFileName"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfLastModified"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.IfNot"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.rolling.action.ScriptCondition"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.routing.Route"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.routing.Routes"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.appender.routing.RoutingAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.AsyncLoggerConfig$RootLogger"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.AsyncWaitStrategyFactoryConfig"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.DisruptorBlockingQueueFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.JCToolsBlockingQueueFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.async.LinkedTransferQueueFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AppenderControlArraySet"},
"name":"org.apache.logging.log4j.core.config.AppenderControlArraySet",
"fields":[{"name":"appenderArray"}]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.AppenderRef"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.AppendersPlugin"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.CustomLevelConfig"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.CustomLevels"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.DefaultAdvertiser"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.HttpWatcher"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.LoggerConfig"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.LoggerConfig$RootLogger"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.LoggersPlugin"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.PropertiesPlugin"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.Property"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.ScriptsPlugin"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.arbiters.ClassArbiter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.arbiters.DefaultArbiter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.arbiters.ScriptArbiter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.arbiters.SelectArbiter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.arbiters.SystemPropertyArbiter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.json.JsonConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigDecimalConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BigIntegerConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$BooleanConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteArrayConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ByteConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharArrayConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharacterConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CharsetConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ClassConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$CronExpressionConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DoubleConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$DurationConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FileConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$FloatConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$InetAddressConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$IntegerConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LevelConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$LongConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PathConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$PatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$SecurityProviderConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$ShortConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$StringConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UriConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UrlConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.plugins.convert.TypeConverters$UuidConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory"},
"name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.BurstFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.CompositeFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.DenyAllFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.DynamicThresholdFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.LevelMatchFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.LevelRangeFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.MapFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.MarkerFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.MutableThreadContextMapFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.NoMarkerFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.RegexFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.ScriptFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.StringMatchFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.StructuredDataFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.ThreadContextMapFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.ThresholdFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.filter.TimeFilter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.LogManager"},
"name":"org.apache.logging.log4j.core.impl.Log4jContextFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
"name":"org.apache.logging.log4j.core.impl.Log4jProvider"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"},
"name":"org.apache.logging.log4j.core.impl.ThreadContextDataProvider"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.AppenderAdmin",
"queryAllPublicConstructors":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.AppenderAdminMBean",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdmin",
"queryAllPublicConstructors":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.ContextSelectorAdminMBean",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.LoggerContextAdmin",
"queryAllPublicConstructors":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.LoggerContextAdminMBean",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdmin",
"queryAllPublicConstructors":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"name":"org.apache.logging.log4j.core.jmx.StatusLoggerAdminMBean",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.CsvLogEventLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.CsvParameterLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.GelfLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.HtmlLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.JsonLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.LevelPatternSelector"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.LoggerFields"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.MarkerPatternSelector"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.MessageLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.PatternLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.PatternMatch"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.Rfc5424Layout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.ScriptPatternSelector"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.SerializedLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.SyslogLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.XmlLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.layout.YamlLayout"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.ContextMapLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.ContextMapLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.DateLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.DateLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.EnvironmentLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.EventLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.EventLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.JavaLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.JavaLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.JndiLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.Log4jLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.Log4jLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.LowerLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.LowerLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.MainMapLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.MainMapLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.MapLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.MapLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.MarkerLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.MarkerLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.ResourceBundleLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.StructuredDataLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.SystemPropertiesLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.lookup.UpperLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.core.lookup.UpperLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.MulticastDnsAdvertiser"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.SocketAddress"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.SocketOptions"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.SocketPerformancePreferences"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.ssl.SslConfiguration"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Black"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Blue"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Cyan"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Green"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Magenta"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Red"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$White"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter$Yellow"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ClassNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.DatePatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.EncodingPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.EqualsReplacementConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.FileDatePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.FileLocationPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.FullLocationPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.HighlightConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.IntegerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.LevelPatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.LineLocationPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.LoggerPatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MapPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MarkerPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MaxLengthConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MdcPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.MessagePatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["org.apache.logging.log4j.core.config.Configuration","java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.NanoTimePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.NdcPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.RegexReplacement"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.RegexReplacementConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.RepeatPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.StyleConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.LoggerContext"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.AbstractConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.ConfigurationFactory$Factory"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
"queryAllDeclaredMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.DefaultConfiguration"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$Builder"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.pattern.PatternParser"},
"name":"org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter",
"methods":[{"name":"newInstance","parameterTypes":["java.lang.String[]"] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.ThrowablePatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.UuidPatternConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.script.Script"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.script.ScriptFile"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.script.ScriptRef"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.core.util.KeyValuePair"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"},
"name":"org.apache.logging.log4j.message.DefaultFlowMessageFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.spi.AbstractLogger"},
"name":"org.apache.logging.log4j.message.ParameterizedMessageFactory",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
"name":"org.apache.logging.log4j.util.EnvironmentPropertySource"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
"name":"org.apache.logging.log4j.util.SystemPropertiesPropertySource"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.SortedArrayStringMap"},
"name":"org.apache.logging.log4j.util.internal.DefaultObjectInputFilter",
"queryAllPublicMethods":true
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.web.WebLookup"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.lookup.Interpolator"},
"name":"org.apache.logging.log4j.web.WebLookup",
"methods":[{"name":"<init>","parameterTypes":[] }]
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"name":"org.apache.logging.log4j.web.appender.ServletAppender"
},
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"},
"name":"java.util.ServiceLoader",
"allPublicMethods":true
}
]
For GraalVM CE For JDK 22.0.2, the required `resource-config.json` for `org.apache.logging.log4j:log4j-api:2.18.0` is as follows🙌
{
"resources":{
"includes":[{
"condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
"pattern":"\\QMETA-INF/log4j-provider.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.config.plugins.util.PluginRegistry"},
"pattern":"\\QMETA-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.impl.ThreadContextDataInjector"},
"pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.ContextDataProvider\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.WatchManager"},
"pattern":"\\QMETA-INF/services/org.apache.logging.log4j.core.util.WatchEventService\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.util.ProviderUtil"},
"pattern":"\\QMETA-INF/services/org.apache.logging.log4j.spi.Provider\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
"pattern":"\\QMETA-INF/services/org.apache.logging.log4j.util.PropertySource\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.jsn\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.json\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.xml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.yaml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test.yml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.jsn\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.json\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.xml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.yaml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2-test2626b418.yml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"},
"pattern":"\\Qlog4j2.StatusLogger.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil"},
"pattern":"\\Qlog4j2.component.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.jsn\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.json\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.util.PropertiesUtil$Environment"},
"pattern":"\\Qlog4j2.system.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.xml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.yaml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j2.yml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.jsn\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.json\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.properties\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.xml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.yaml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.util.Loader"},
"pattern":"\\Qlog4j22626b418.yml\\E"
}, {
"condition":{"typeReachable":"org.apache.logging.log4j.core.jmx.Server"},
"pattern":"jdk.jfr:\\Qjdk/jfr/internal/query/view.ini\\E"
}]},
"bundles":[{
"name":"sun.util.resources.cldr.CalendarData",
"locales":["und"]
}]
}
Controversy in history
- The above GRM is not obtained and organized from the unit test for Log4j2, but extracted from the unit test for HiveServer2 JDBC Driver on the apache/shardingsphere side. HiveServer2 JDBC Driver relies on a lot of logging dependencies in the compile scope.
commons-logging:commons-logging:1.2
org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1
org.jboss.logging:jboss-logging:3.1.3.GA
org.apache.logging.log4j:log4j-1.2-api:2.18.0
org.apache.logging.log4j:log4j-api:2.18.0
org.apache.logging.log4j:log4j-core:2.18.0
org.apache.logging.log4j:log4j-slf4j-impl:2.18.0
org.apache.logging.log4j:log4j-web:2.18.0
log4j:log4j:1.2.17
org.slf4j:slf4j-log4j12:1.7.25
- 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.
Initial processing on the apache/shardingsphere side🙌
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-service</artifactId>
<version>4.0.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
- With the addition of GRM, issues around using Log4j2 under GraalVM Native Image were resolved. For the following Warning Log under GraalVM Native Image, there are the following GRM entries to solve it.
{
"condition":{"typeReachable":"org.apache.logging.log4j.util.ServiceLoaderUtil"},
"name":"java.util.ServiceLoader",
"allPublicMethods":true
}
Warning Log related to ` java.lang.NoSuchMethodException: no such method: java.util.ServiceLoader.load(Class,ClassLoader)ServiceLoader/invokeStatic`🙌
ERROR StatusLogger Unable to load services for service class org.apache.logging.log4j.spi.Provider
java.lang.NoSuchMethodException: no such method: java.util.ServiceLoader.load(Class,ClassLoader)ServiceLoader/invokeStatic
at [email protected]/java.lang.invoke.MemberName.makeAccessException(MemberName.java:910)
at [email protected]/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:989)
at [email protected]/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:3762)
at [email protected]/java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:2660)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadClassloaderServices(ServiceLoaderUtil.java:90)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:74)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:68)
at org.apache.logging.log4j.util.ProviderUtil.<init>(ProviderUtil.java:67)
at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:145)
at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:129)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:90)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
at org.apache.curator.test.DirectoryUtils.<clinit>(DirectoryUtils.java:35)
at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:203)
at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:111)
at org.apache.curator.test.TestingServer.<init>(TestingServer.java:97)
at org.apache.curator.test.TestingServer.<init>(TestingServer.java:43)
at org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest.assertShardingInLocalTransactions(ZookeeperTest.java:66)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.execute(NativeImageJUnitLauncher.java:74)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.main(NativeImageJUnitLauncher.java:129)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
- For the following Warning Log, this seems to be a bug of Log4j2, which does not prevent the use of log4j2 under nativeTest.
Warning Log related to ` java.util.ServiceConfigurationError: org.apache.logging.log4j.spi.Provider: module org.graalvm.nativeimage.builder does not declare `uses``🙌
ERROR StatusLogger Unable to load services for service class org.apache.logging.log4j.spi.Provider
java.util.ServiceConfigurationError: org.apache.logging.log4j.spi.Provider: module org.graalvm.nativeimage.builder does not declare `uses`
at [email protected]/java.util.ServiceLoader.fail(ServiceLoader.java:589)
at [email protected]/java.util.ServiceLoader.checkCaller(ServiceLoader.java:575)
at [email protected]/java.util.ServiceLoader.<init>(ServiceLoader.java:503)
at [email protected]/java.util.ServiceLoader.load(ServiceLoader.java:1646)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:253)
at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:96)
at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0)
at [email protected]/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadClassloaderServices(ServiceLoaderUtil.java:91)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:74)
at org.apache.logging.log4j.util.ServiceLoaderUtil.loadServices(ServiceLoaderUtil.java:68)
at org.apache.logging.log4j.util.ProviderUtil.<init>(ProviderUtil.java:67)
at org.apache.logging.log4j.util.ProviderUtil.lazyInit(ProviderUtil.java:145)
at org.apache.logging.log4j.util.ProviderUtil.hasProviders(ProviderUtil.java:129)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:90)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:49)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
at org.apache.curator.test.DirectoryUtils.<clinit>(DirectoryUtils.java:35)
at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:203)
at org.apache.curator.test.InstanceSpec.<init>(InstanceSpec.java:111)
at org.apache.curator.test.TestingServer.<init>(TestingServer.java:97)
at org.apache.curator.test.TestingServer.<init>(TestingServer.java:43)
at org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest.assertShardingInLocalTransactions(ZookeeperTest.java:66)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at [email protected]/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:94)
at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:52)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:70)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.execute(NativeImageJUnitLauncher.java:74)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.main(NativeImageJUnitLauncher.java:129)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Controversy in StackoverFlow about com.sun.jmx.mbeanserver.JmxMBeanServer
- 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 .
Error Log🙌
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.
You now have two options to resolve this:
1) If it is intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, add
'--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer'
to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'com.sun.jmx.mbeanserver.JmxMBeanServer' to see if they are safe for build-time initialization, and that they do not contain any sensitive data that should not become part of the image.
2) If these objects should not be stored in the image heap, you can use
'--trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer'
to find classes that instantiate these objects. Once you found such a class, you can mark it explicitly for run time initialization with
'--initialize-at-run-time=<culprit>'
to prevent the instantiation of the object.
If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
To fix this, include '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.
The following detailed trace displays from which field in the code the object was reached.
Object was reached by
manually created constant
- The original issue is complete nonsense, because with GraalVM CE For JDK22, users can even connect to the GraalVM Native Image using JMX in JDK Mission Control. If you add
--trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServerto thebuildArgwhen building the GraalVM Native Image, you will see that the Error Log is actually caused byio.grpc:grpc-netty-shaded.
Hi, I am a class of `io.grpc:grpc-netty-shaded`🙌
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.
You now have two options to resolve this:
1) If it is intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, add
'--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer'
to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'com.sun.jmx.mbeanserver.JmxMBeanServer' to see if they are safe for build-time initialization, and that they do not contain any sensitive data that should not become part of the image.
2) If if it is not intended that objects of type 'com.sun.jmx.mbeanserver.JmxMBeanServer' are persisted in the image heap, examine the stack trace and use
'--initialize-at-run-time=io.grpc.netty.shaded.io.netty.channel.AbstractChannel'
to prevent instantiation of the culprit object.
The culprit object has been instantiated by the 'io.grpc.netty.shaded.io.netty.channel.AbstractChannel' class initializer with the following trace:
at com.sun.jmx.mbeanserver.JmxMBeanServer.<init>(JmxMBeanServer.java:225)
at com.sun.jmx.mbeanserver.JmxMBeanServer.newMBeanServer(JmxMBeanServer.java:1437)
at javax.management.MBeanServerBuilder.newMBeanServer(MBeanServerBuilder.java:110)
at javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:329)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:231)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:192)
at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:487)
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:632)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:694)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:137)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:55)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at io.grpc.netty.shaded.io.netty.util.internal.logging.Slf4JLoggerFactory.newInstance(Slf4JLoggerFactory.java:49)
at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.useSlf4JLoggerFactory(InternalLoggerFactory.java:63)
at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.newDefaultFactory(InternalLoggerFactory.java:42)
at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getDefaultFactory(InternalLoggerFactory.java:111)
at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:134)
at io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory.getInstance(InternalLoggerFactory.java:127)
at io.grpc.netty.shaded.io.netty.channel.AbstractChannel.<clinit>(AbstractChannel.java:45)
If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
To fix this, include '--initialize-at-build-time=com.sun.jmx.mbeanserver.JmxMBeanServer' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.
The following detailed trace displays from which field in the code the object was reached.
Object was reached by
manually created constant
- I don’t want to discuss here what the GRM for
io.grpc:grpc-netty-shadedshould 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.
`native-image.properties` of `io.grpc:grpc-netty-shaded`🙌
Args=--initialize-at-run-time=\
io.grpc.netty.shaded.io.netty.channel.ChannelHandlerMask,\
io.grpc.netty.shaded.io.netty.channel.nio.AbstractNioChannel,\
io.grpc.netty.shaded.io.netty.channel.socket.nio.SelectorProviderUtil,\
io.grpc.netty.shaded.io.netty.util.concurrent.DefaultPromise,\
io.grpc.netty.shaded.io.netty.util.internal.MacAddressUtil,\
io.grpc.netty.shaded.io.netty.util.internal.SystemPropertyUtil,\
io.grpc.netty.shaded.io.netty.util.NetUtilInitializations,\
io.grpc.netty.shaded.io.netty.channel.AbstractChannel,\
io.grpc.netty.shaded.io.netty.util.NetUtil,\
io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent,\
io.grpc.netty.shaded.io.netty.util.internal.PlatformDependent0,\
io.grpc.netty.shaded.io.netty.channel.DefaultChannelPipeline,\
io.grpc.netty.shaded.io.netty.channel.DefaultChannelId,\
io.grpc.netty.shaded.io.netty.util.ResourceLeakDetector,\
io.grpc.netty.shaded.io.netty.channel.AbstractChannelHandlerContext,\
io.grpc.netty.shaded.io.netty.channel.ChannelOutboundBuffer,\
io.grpc.netty.shaded.io.netty.util.internal.InternalThreadLocalMap,\
io.grpc.netty.shaded.io.netty.util.internal.CleanerJava9,\
io.grpc.netty.shaded.io.netty.util.internal.StringUtil,\
io.grpc.netty.shaded.io.netty.util.internal.CleanerJava6,\
io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil$HexUtil,\
io.grpc.netty.shaded.io.netty.buffer.AbstractByteBufAllocator,\
io.grpc.netty.shaded.io.netty.util.concurrent.FastThreadLocalThread,\
io.grpc.netty.shaded.io.netty.buffer.PoolArena,\
io.grpc.netty.shaded.io.netty.buffer.EmptyByteBuf,\
io.grpc.netty.shaded.io.netty.buffer.PoolThreadCache,\
io.grpc.netty.shaded.io.netty.util.AttributeKey
Summary
- After some interesting exploration, apache/shardingsphere can use HiveServer2 JDBC Driver under GraalVM Native Image without excluding
org.apache.logging.log4j:log4j-api:2.18.0.