You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Maple Wang <ma...@hotmail.com> on 2016/08/09 10:14:44 UTC

why MutableLogEvent don't keep the ReusableObjectMessage

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.

RE: why MutableLogEvent don't keep the ReusableObjectMessage

Posted by Maple Wang <ma...@hotmail.com>.
Hi,

Anyone knew or met similar issue below? Thanks in advance.

Best regards.

-----Original Message-----
From: Maple Wang [mailto:maple.feng.wang@hotmail.com] 
Sent: Tuesday, August 09, 2016 6:15 PM
To: Log4J Users List
Subject: why MutableLogEvent don't keep the ReusableObjectMessage

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.

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org