[ 
https://jira.qos.ch/browse/SLF4J-468?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=19850#comment-19850
 ] 

Ceki Gülcü commented on SLF4J-468:
----------------------------------

[~delgurth] There was a problem sending messages to gmail. Please let me know 
if you have seem my previous comment. 

> MessageFormatter codepath improvements in case of one and two Object 
> parameters
> -------------------------------------------------------------------------------
>
>                 Key: SLF4J-468
>                 URL: https://jira.qos.ch/browse/SLF4J-468
>             Project: SLF4J
>          Issue Type: Improvement
>    Affects Versions: 1.7.x
>            Reporter: Wessel van Norel
>            Assignee: SLF4J developers list
>            Priority: Minor
>
> The pseudo path the code follows in case of one argument is:
> org.slf4j.helpers.MessageFormatter#format(java.lang.String, java.lang.Object)
> create Object Array with size one and put the parameter in it
> get length of array
> check if Element[length -1] of this Array is a Throwable
> if throwable
>     create empty object array
>     create new Stringbuffer to contain message
>     append message to Stringbuffer
>     return Stringbuffer
> else
>     normal codeflow to format the message with argument
> fi
> The flow around a Throwable is suboptimal, which is logical since you should 
> not be calling this with just a Throwable. But by adding a instanceof call to 
> this method and then calling 
> org.slf4j.helpers.MessageFormatter#arrayFormat(java.lang.String, 
> java.lang.Object[], java.lang.Throwable) directy with the proper parameters 
> safes the get & check in the array and in case of Throwable the new array and 
> unneeded stringbuffer creation. Skipping the instanceof call might result in 
> undesired behaviour in case a logger implementation is calling this formatter 
> even though it has no need for it. 
> I would suggest that for 2.0.0 the instanceof check is not added, but for 
> 1.7.x it contains it, so the library behaves as before the change, but a 
> little bit faster. 
>  
> The pseudo code path for the 2 argument version is:
> org.slf4j.helpers.MessageFormatter#format(java.lang.String, java.lang.Object, 
> java.lang.Object)
> create Object Array with size two and put both parameters in it
> get length of array
> check if Element[length -1] of this Array is a Throwable
> if Throwable
>     create object array with size 1 and copy first element of the size two 
> array into it
>     normal codeflow to format the message with argument
> else
>     normal codeflow to format the message with arguments
> fi
> With an instanceof and then directly calling 
> org.slf4j.helpers.MessageFormatter#arrayFormat(java.lang.String, 
> java.lang.Object[], java.lang.Throwable) safes some processing in both cases.



--
This message was sent by Atlassian JIRA
(v7.3.1#73012)
_______________________________________________
slf4j-dev mailing list
slf4j-dev@qos.ch
http://mailman.qos.ch/mailman/listinfo/slf4j-dev

Reply via email to