[
https://issues.apache.org/jira/browse/LOG4J2-1510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maple Wang closed LOG4J2-1510.
------------------------------
Resolution: Fixed
the suggestion works
> 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: [email protected]
For additional commands, e-mail: [email protected]