On Fri, Oct 5, 2012 at 2:03 PM, Ralph Goers <ralph.go...@dslextreme.com>wrote:

> I updated ReflectionComparison to include comparing creating the object
> via "new" and via reflection.
>
> Timer NewObject stopped. Elapsed time: 0.019149000 seconds Average per
> iteration: 0.000000019 seconds
> Timer ReflectionObject stopped. Elapsed time: 0.171598000 seconds Average
> per iteration: 0.000000171 seconds
>
> So reflection definitely is noticeably slower, but this is only going to
> occur after filtering has passed and is probably a good tradeoff for
> avoiding calling "new" in the application until it is actually needed. For
> example, there would probably be hundreds of logging calls that wouldn't
> create an object because filtering didn't pass, thus compensating for the
> extra cost of allocating the objects and immediately discarding them.
> OTOH, doing
>
> if (logger.isDebugEnabled()) {
>   logger.debug(new StringFormattedMessage(format, param));
> }
>

I wonder if you could simplify the class names...

StringFormattedMessage to one of:

- StringMessage
- FormattedMessage
- StringFormatMessage

ParameterizedMessage could be:

- TokenMessage
- BracketMessage
- SimpleMessage

All of the xxx'ed names seem a little odd to me, not to say wordy.

?


> would probably perform better than
>
> logger.debug(StringFormattedMessage.class, format, param);
>
> Ralph
>
>
> On Oct 5, 2012, at 8:35 AM, Gary Gregory wrote:
>
> On Thu, Oct 4, 2012 at 10:54 PM, Ralph Goers <rgo...@apache.org> wrote:
>
>> Yup. That is what I would expect.  However, it probably requires a
>> Message that has a constructor that accepts a Throwable and an object
>> array, which means we would probably want a new interface as a marker.
>>
>
> So would reflection be used at runtime to instantiate the message?
> Wouldn't that be a performance hit?
>
> We could just provide APIs in AbstractLogger for the built-in message
> classes that do the instance creation w/o reflection.
>
> Thoughts?
>
> Gary
>
>
>> Ralph
>>
>> Sent from my iPad
>>
>> On Oct 4, 2012, at 7:18 PM, Paul Benedict <pbened...@apache.org> wrote:
>>
>> Ooops. I meant this:
>>
>> logger.debug(Class<? extends Message> m, Throwable t, Object...
>> messageParams);
>>
>> The point was to pass in the Class of the Message so it doesn't get
>> instantiated unless logging is going to occur.
>>
>> Paul
>>
>> On Thu, Oct 4, 2012 at 9:12 PM, Gary Gregory <garydgreg...@gmail.com>wrote:
>>
>>> On Thu, Oct 4, 2012 at 10:06 PM, Paul Benedict <pbened...@apache.org>wrote:
>>>
>>>> On Thu, Oct 4, 2012 at 7:24 PM, Gary Gregory <garydgreg...@gmail.com>wrote:
>>>>
>>>>> On Thu, Oct 4, 2012 at 5:55 PM, Paul Benedict <pbened...@apache.org>wrote:
>>>>>
>>>>>> Ralph,
>>>>>>
>>>>>> This is actually a discussion you and I had a while back when I was
>>>>>> trying to figure out how to use String.format(). I like the model now of
>>>>>> specifying the message class... however...
>>>>>>
>>>>>> It does seem a bit unseemly to instantiate an xxxMessage object that
>>>>>> may never get used. I'd rather just pass in the Class<?> and let the 
>>>>>> logger
>>>>>> instantiate it only if it is going to log something. The only downside is
>>>>>> then configuring the actual class.
>>>>>>
>>>>>> Thoughts?
>>>>>>
>>>>>
>>>>> So instead of:
>>>>>
>>>>> this.logger.debug(new StringFormattedMessage(format, values), t);
>>>>>
>>>>> I would do:
>>>>>
>>>>> this.logger.debug(StringFormattedMessage.class, t, format, values);
>>>>>
>>>>>
>>>> I was thinking of adding this signature:
>>>> logger.debug(Message m, Throwable t, Object... messageParams);
>>>>
>>>> Thoughts?
>>>>
>>>
>>> Pardon me for being dense, but how does that help in the case of my
>>> examples?
>>>
>>> Thank you in advance for clarifying,
>>> Gary
>>>
>>>>
>>>> Paul
>>>>
>>>
>>>
>>>
>>> --
>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>>> JUnit in Action, 2nd Ed: <http://goog_1249600977/>http://bit.ly/ECvg0
>>> Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>
>>
>
>
> --
> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> JUnit in Action, 2nd Ed: <http://goog_1249600977/>http://bit.ly/ECvg0
> Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0
Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to