-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Closed
Description
Description
Trying to use a logger in a class annotated with @Plugin from org.apache.logging.log4j.core.config.plugins throws an exception. The same problem does not happen on versions 2.23.1, 2.24.0 and 2.24.1.
Configuration
Version: 2.24.2
Operating system: linux
JDK: Amazon Correto, 21
Logs
2024-11-26T08:33:59.000998374Z main ERROR Unable to create Lookup for myplugin java.lang.IllegalArgumentException: java.lang.ExceptionInInitializerError
at org.apache.logging.log4j.core.util.ReflectionUtil.instantiate(ReflectionUtil.java:192)
at org.apache.logging.log4j.core.lookup.Interpolator.<init>(Interpolator.java:90)
at org.apache.logging.log4j.core.lookup.Interpolator.<init>(Interpolator.java:109)
at org.apache.logging.log4j.core.config.AbstractConfiguration.<init>(AbstractConfiguration.java:137)
at org.apache.logging.log4j.core.config.NullConfiguration.<init>(NullConfiguration.java:32)
at org.apache.logging.log4j.core.LoggerContext.<clinit>(LoggerContext.java:77)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:265)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:224)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:142)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:125)
at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:119)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:148)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:46)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:138)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:136)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:58)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:32)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:432)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:457)
(...)
Caused by: java.lang.ExceptionInInitializerError
at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at org.apache.logging.log4j.core.util.ReflectionUtil.instantiate(ReflectionUtil.java:188)
... 20 more
Caused by: java.lang.NullPointerException: messageFactory
at java.base/java.util.Objects.requireNonNull(Objects.java:259)
at org.apache.logging.log4j.core.util.internal.InternalLoggerRegistry.computeIfAbsent(InternalLoggerRegistry.java:135)
at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:530)
at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:503)
at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:65)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:49)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:32)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:32)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:432)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:457)
(...)
... 29 more
Reproduction
The code below used to run fine, then after upgrading to 2.24.2 it started throwing on application startup. Getting rid of the LOGGER variable "fixes" the problem.
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Plugin(name = "MyPlugin", category = StrLookup.CATEGORY)
public class MyPlugin implements StrLookup {
private static final Logger LOGGER = LoggerFactory.getLogger(MyPlugin.class);
static {
LOGGER.info("Log stuff");
}
@Override
public String lookup(String key) {
return "";
}
@Override
public String lookup(LogEvent event, String key) {
return "";
}
}
ppkarwasz
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
Done