Closed Armstrong4444 closed 4 months ago
We could, perhaps, change the code that's logging the message to turn it into a String
first. However, there's an outside chance that could break someone's existing logging setup that's relying up it being logged as an object for some reason.
Alternatively, you may be able to get this to work by customising the ObjectMapper
that Log4j2 is using with a custom serializer for the ConditionEvaluationReportMessage
. That converter could be as simple as calling toString()
on it.
Unfortunately, I couldn't find any way to customize the ObjectMapper that log4j2 is using. The ObjectMapper is instantiated in https://github.com/apache/logging-log4j2/blob/rel/2.21.1/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JacksonFactory.java#L88. This ObjectMapper object is used here: https://github.com/apache/logging-log4j2/blob/e613e9ed71279bb52753a4df810d61c11389df81/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JacksonFactory.java#L276. The ObjectWriter, which is created from the ObjectMapper, probably can't be customized either, as it is wrapped in JsonLayout without any accessor.
Just one way I see to solve this within Log4j2 is to create a completely new customized JsonLayout (for example MyJsonLayout) plugin instead of using the standard Log4j2 JsonLayout plugin. However, I probably wouldn't do that and would come to accept this issue for the time being.
Hey,
it says here that JsonLayout is deprecated. When using the replacement JsonTemplateLayout
and setting stringified
to false
for the message
field, it still serializes MapMessage
to a structured JSON. But Log4J will no longer try to serialize all messages to JSON, instead they are written as a String
. I guess the Log4j developers learned that serializing every given object to JSON sometimes fails and changed that from JsonLayout
to JsonTemplateLayout
.
You can see the setup working in action in this repo.
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.
Hi, The Log4j2 StatusLogger throws an error after attempting to log a
ConditionEvaluationReportMessage
.Log4j2 xml configuration file is:
It seems that the cause of the problem is the attribute 'objectMessageAsJsonObject' set to 'true' in the JsonLayout element. When it is set to 'false', the error is not thrown.
Spring Boot version is 3.2.2