Skip to content

Custom Fields might lead to "java.lang.UnsupportedOperationException" with log4j2 #135

@KarstenSchnitter

Description

@KarstenSchnitter

Custom fields can be added to log messages by using the CustomField class:

LOGGER.info("Hello World!", CustomField.customField("my_field", "my_value"));

This can result in the following stacktrace:

2022-01-21 09:59:49,158 main ERROR An exception occurred processing Appender Console java.lang.UnsupportedOperationException
	at java.base/java.util.Collections$UnmodifiableMap.put(Collections.java:1457)
	at com.sap.hcp.cf.log4j2.converter.ContextPropsConverter.addCustomFieldsFromArguments(ContextPropsConverter.java:63)
	at com.sap.hcp.cf.log4j2.converter.ContextPropsConverter.format(ContextPropsConverter.java:50)
	at org.apache.logging.log4j.core.pattern.PatternFormatter.format(PatternFormatter.java:44)
	at com.sap.hcp.cf.log4j2.layout.JsonPatternLayout.toSerializable(JsonPatternLayout.java:47)
	at com.sap.hcp.cf.log4j2.layout.JsonPatternLayout.toSerializable(JsonPatternLayout.java:23)
	at org.apache.logging.log4j.core.layout.AbstractStringLayout.toByteArray(AbstractStringLayout.java:282)
	at org.apache.logging.log4j.core.layout.AbstractLayout.encode(AbstractLayout.java:209)
	at org.apache.logging.log4j.core.layout.AbstractLayout.encode(AbstractLayout.java:37)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:197)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:190)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:181)
	at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:134)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:125)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:89)
	at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:542)
	at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:500)
	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:483)
	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
	at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
	at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
	at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
	at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
	at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
	at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2034)
	at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1899)
	at org.apache.logging.slf4j.Log4jLogger.error(Log4jLogger.java:304)

The current implementation of com.sap.hcp.cf.log4j2.converter.ContextPropsConverter.addCustomFieldsFromArgumentsdoes not reflect, that event.getContextData().toMap() might return an unmodifiable map. This needs to be changed to avoid that error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    good-first-issueThis issue is easy to implement. It can be taken to get into contributing ot the library.log4jThis issue is concerned with the log4j integration.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions