[ https://issues.apache.org/jira/browse/LOG4J2-1510?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15427452#comment-15427452 ]
Remko Popma commented on LOG4J2-1510: ------------------------------------- [~maple.feng.w...@hotmail.com], You marked this question as a Blocker. Can you close this question if the issue has been resolved, or let us know if you need more information or want to request a change? > why MutableLogEvent don't keep original log object or even the > ReusableObjectMessage > ------------------------------------------------------------------------------------- > > Key: LOG4J2-1510 > URL: https://issues.apache.org/jira/browse/LOG4J2-1510 > Project: Log4j 2 > Issue Type: Question > Components: Core > Affects Versions: 2.6.2 > Reporter: Maple Wang > Priority: Blocker > > 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 though 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: > {code} > 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; > } > } > {code} > So , when I call the getMessage from MutableLogEvent like below, I only can > get the instance of MutableLogEvent itself. > {code} > public Message getMessage() { > if (message == null) { > return (messageText == null) ? EMPTY : this; > } > return message; > } > {code} > If I use the ReusableMessageFactory and ReusableLogEventFactory, then when I > send out an object though API, it seems impossible to get it from > MutableLogEvent. > I know I can use other MessageFactory to bypass it, but why MutableLogEvent > don't keep the ReusableObjectMessage or original object, is that on purpose? > Is there other way to get the ReusableObjectMessage or original object from > MutableLogEvent? > Best reagrds. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org