-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Description
When using the JsonLayout in a very simple configuration such as this:
<Console name="Console" target="SYSTEM_OUT">
<JsonLayout/>
</Console>
There is an InaccessibleObjectException when trying to instantiate a ContextDataSerializer because its constructor is protected:
ERROR An exception occurred processing Appender Console java.lang.reflect.InaccessibleObjectException: Unable to make protected org.apache.logging.log4j.core.jackson.ContextDataSerializer() accessible: module org.apache.logging.log4j.core does not "opens org.apache.logging.log4j.core.jackson" to module com.fasterxml.jackson.databind
We are aware that JsonLayout has been marked as deprecated and there is another alternative called JsonTemplateLayout. That one works. However, our customers are still using JsonLayout in their configurations and they would like to be able to keep doing so.
Configuration
Version: Tested in 2.23.1 but probably happens on any 2.x
Operating system: Doesn't seem to matter, but tested with macOS 14.6
JDK: Tested with Temurin-17.0.11+9
Logs
2024-08-08T18:40:40.439988Z main ERROR An exception occurred processing Appender Console java.lang.reflect.InaccessibleObjectException: Unable to make protected org.apache.logging.log4j.core.jackson.ContextDataSerializer() accessible: module org.apache.logging.log4j.core does not "opens org.apache.logging.log4j.core.jackson" to module com.fasterxml.jackson.databind
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:188)
at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:181)
at [email protected]/com.fasterxml.jackson.databind.util.ClassUtil.checkAndFixAccess(ClassUtil.java:1005)
at [email protected]/com.fasterxml.jackson.databind.util.ClassUtil.findConstructor(ClassUtil.java:577)
at [email protected]/com.fasterxml.jackson.databind.util.ClassUtil.createInstance(ClassUtil.java:559)
at [email protected]/com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializerInstance(DefaultSerializerProvider.java:144)
at [email protected]/com.fasterxml.jackson.databind.ser.BasicSerializerFactory.findSerializerFromAnnotation(BasicSerializerFactory.java:547)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory._constructWriter(BeanSerializerFactory.java:860)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanProperties(BeanSerializerFactory.java:634)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanOrAddOnSerializer(BeanSerializerFactory.java:402)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanOrAddOnSerializer(BeanSerializerFactory.java:295)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:240)
at [email protected]/com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:174)
at [email protected]/com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1525)
at [email protected]/com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1473)
at [email protected]/com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:578)
at [email protected]/com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:856)
at [email protected]/com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:330)
at [email protected]/com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574)
at [email protected]/com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1275)
at [email protected]/com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1114)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractJacksonLayout.toSerializable(AbstractJacksonLayout.java:379)
at [email protected]/org.apache.logging.log4j.core.layout.JsonLayout.toSerializable(JsonLayout.java:390)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractJacksonLayout.toSerializable(AbstractJacksonLayout.java:327)
at [email protected]/org.apache.logging.log4j.core.layout.JsonLayout.toSerializable(JsonLayout.java:69)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractJacksonLayout.toSerializable(AbstractJacksonLayout.java:50)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(AbstractStringLayout.java:295)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractLayout.encode(AbstractLayout.java:207)
at [email protected]/org.apache.logging.log4j.core.layout.AbstractLayout.encode(AbstractLayout.java:36)
at [email protected]/org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:227)
at [email protected]/org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:220)
at [email protected]/org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:211)
at [email protected]/org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:160)
at [email protected]/org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:133)
at [email protected]/org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:124)
at [email protected]/org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:88)
at [email protected]/org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:705)
at [email protected]/org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:663)
at [email protected]/org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:639)
at [email protected]/org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:575)
at [email protected]/org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:92)
at [email protected]/org.apache.logging.log4j.core.Logger.log(Logger.java:169)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2906)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2859)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2841)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2620)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:2567)
at [email protected]/org.apache.logging.log4j.spi.AbstractLogger.warn(AbstractLogger.java:3469)
at [email protected]/org.mule.tests.Main.main(Main.java:12)
Reproduction
Attaching a minimalistic Maven project that reproduces the issue.
log4j-jsonLayout-test.zip