[ 
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

Reply via email to