[ 
https://issues.apache.org/jira/browse/LOG4J2-1271?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15149949#comment-15149949
 ] 

Ralph Goers edited comment on LOG4J2-1271 at 2/17/16 5:56 AM:
--------------------------------------------------------------

The way I would prefer to handle this is to not call argumentsToStrings in the 
constructor but leave that for when getFormattedMessage() is called. Then we 
need to make sure that getFormattedMessage is called before the Message is 
passed to another thread. The work that argumentsToStrings is doing is 
necessary - it determines if the last argument is a throwable and saves a 
reference to it - and calling the toString method on the Objects is always 
going to be necessary.


was (Author: ralph.go...@dslextreme.com):
The way I would prefer to handle this is to not call argumentsToStrings in the 
constructor but leave that for when getFormattedMessage() is called. Then we 
need to make sure that getFormattedMessage is called before the Message is 
passed to another thread.

> ParameterizedMessage optimization
> ---------------------------------
>
>                 Key: LOG4J2-1271
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1271
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: API
>    Affects Versions: 2.5
>            Reporter: Remko Popma
>            Assignee: Remko Popma
>
> ParameterizedMessage creates unnecessary objects and does other unnecessary 
> work in its constructor.
> On the other hand, it does not create the full formatted string it will 
> eventually need to return from {{getFormattedMessage()}}.
> I propose the following changes:
> * Don't call {{argumentsToStrings}} in the constructor. Converting the 
> parameter Object[] array to a String[] array should only be done when 
> necessary: when this ParameterizedMessage is serialized.
> * Don't copy the parameter Object[] array to a new array. Instead clone the 
> array when the {{getParameters()}} method is called.
> * In the constructor, build the fully formatted message. This combines the 
> work done by {{formatStringArgs(String, String[])}} and 
> {{argumentsToStrings(Object[])}} and avoids the issue mentioned in LOG4J2-763.



--
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