To add a little weight to Don's comments, the cost of allocating an
array really is *very* minor. To quote Brian Goetz[1], the cost of
allocating a new object in 1.4.2 and above is approximately 10
instructions (maybe more for an array, but remember that var-arg
calls are optimized at compile time). And more to the point, since
it's lifetime is very short, the GC overhead is most often zero. So
the overhead is minor at best.
[1] http://www-128.ibm.com/developerworks/java/library/j-
jtp09275.html#resources
On Aug 22, 2006, at 4:21 PM, Don Brown wrote:
> There will always be cases where the isDebugEnabled method will be
> necessary, but for the vast majority of cases, I think the varargs
> solution is perfect. The very minor cost of an Object array, IMO,
> is well worth the value of code clarity, simplicity, and
> maintainability.
>
> Don
>
> Laurie Harper wrote:
>> The var-args log message construction is definitely a nice bit of
>> syntactic sugar, but removing the guard seems unwise; sure,
>> there's no string concatenation in the call to log.debug, but
>> there's an implicit Object[] instantiation, which isn't much
>> better. There's a reason every major logging API includes
>> isLoggable/isDebugEnabled/whatever guard methods...
>>
>> L.
>>
>> Don Brown wrote:
>>> I think a couple extra classes is worth switching from this:
>>>
>>> public Order createOrder(User user, Product product, int quantity) {
>>> if ( log.isLoggable(Level.FINE) ) {
>>> log.fine("Creating new order for user: " + user.username()
>>> + " product: " + product.name() + "
>>> quantity: " + quantity);
>>> }
>>> return new Order(user, product, quantity);
>>> }
>>>
>>> to this:
>>>
>>> public Order createOrder(User user, Product product, int quantity) {
>>> log.debug("Creating new order for user: #0 product: #1
>>> quantity: #2", user.username(), product.name(), quantity);
>>> return new Order(user, product, quantity);
>>> }
>>>
>>>
>>> Considering how often we log things, I think the cleanup is huge
>>> and a few classes are definitely worth the price.
>>>
>>> Don
>>>
>>> Bob Lee wrote:
>>>> On 8/22/06, Don Brown <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>> Well, for one, we only really need one logging instance for the
>>>>> whole
>>>>> library. Second, and admittedly this is subjective, the
>>>>> java.util.logging API is a horribly designed, obtuse API. I'd
>>>>> rather
>>>>> see us write a small, clean API along the lines of Seam's
>>>>> logging class
>>>>> that utilizes varargs to reduce the need for isDebugEnabled().
>>>>
>>>>
>>>> I agree that j.u.logging is a PoS, but it's ubiquitous, and for our
>>>> purposes, it workds fine. We may only need one logger for the whole
>>>> framework, but it's just as easy to create a logger per class,
>>>> and you can
>>>> still configure them all at once. I'd rather fix j.u.logging
>>>> than build yet
>>>> another API.
>>>>
>>>> Bob
>>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]