Hi, After upgrading Log4j from 2.5 to 2.6.2, I found that log event catched by my appender is changed from Log4jLogEvent to MutableLogEvent, it's fine except that I can't get the ObjectMessage from MutableLogEvent. If I sent object message thought log4j API like log.info(object);, I assume object can be obtained in ReusableObjectMessage, but since MutableLogEvent look like don't keep it as below:
public void setMessage(final Message msg) { if (msg instanceof ReusableMessage) { final ReusableMessage reusable = (ReusableMessage) msg; reusable.formatTo(getMessageTextForWriting()); if (parameters != null) { parameters = reusable.swapParameters(parameters); parameterCount = reusable.getParameterCount(); } } else { // if the Message instance is reused, there is no point in freezing its message here if (!Constants.FORMAT_MESSAGES_IN_BACKGROUND && msg != null) { // LOG4J2-898: user may choose msg.getFormattedMessage(); // LOG4J2-763: ask message to freeze parameters } this.message = msg; } } So , when I call the getMessage from MutableLogEvent like below, I only can get the instance of MutableLogEvent itself. public Message getMessage() { if (message == null) { return (messageText == null) ? EMPTY : this; } return message; } I know I can use other MessageFactory to bypass it, but why MutableLogEvent don't keep the ReusableObjectMessage, is that on purpose? Is there other way to get the ReusableObjectMessage from MutableLogEvent? Best reagrds.