It'd be better to not overuse logging, that will improve performance
and readability. We'd take a closer look how we use logging, as it was
mentioned on the last Devoxx - "logging should be threaded in the same
way as UI for users" (more or less ;-) )

And keeping our own Logger is the best option, then we can always
change underlaying implementation (slf4j, log4j, etc)


Kind regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/
Warszawa JUG conference - Confitura http://confitura.pl/


2011/5/6 Rene Gielen <gie...@it-neering.net>:
> See inline comments (initial mail wrongly addressed)
>
> On 05.05.11 07:02, Lukasz Lenart wrote:
>> 2011/5/5 Martin Cooper <mart...@apache.org>:
>>> On Wed, May 4, 2011 at 9:32 PM, Lukasz Lenart
>>> <lukasz.len...@googlemail.com> wrote:
>>>> Hi,
>>>>
>>>> I've removed the parts where concatenating was over constants -
>>>> constant message plus constant as a string. I'm pretty sure that the
>>>> modern JIT compilers would optimize that as well. And the code is more
>>>> readable IMHO.
>>>> Another thing, debug(), info(), etc checks if the given log level is
>>>> set up or not and then performs logging (IO request, sending e-mail,
>>>> etc). So, it will not affect performance as well (except if there is a
>>>> bug ;-) )
>>>
>>> Not true. In order to call the method in the first place, all of the
>>> arguments must be evaluated.
>>>
>>> If you do this, the expensive function will _always_ be invoked,
>>> whether 'info' level logging is enabled or not:
>>>
>>>    log.info("And the answer is: " + doSomethingExpensive());
>>
>> log.info("And the answer is: " + DO_SOMETHING_CONSTANT_STRING) will be
>> optimized by JIT and that's why I've removed logging gates. There
>> wasn't any call to a method and object concatenation.
>>
>>> However, if you guard it, like this, the expensive function is _only_
>>> evaluated when the guard is passed:
>>>
>>>    if (log.isInfoEnabled()) {
>>>        log.info("And the answer is: " + doSomethingExpensive());
>>>    }
>>>
>>
>> Yes, I agree, but it wan't the case.
>>
>>> The usual argument I've seen for getting rid of the guards is that
>>> most of the calls don't do anything expensive, so there's little
>>> reason to guard them. However, it's far too easy for someone else to
>>> come along later and modify the log message without thinking about it
>>> perhaps now needing a guard, because it's now more expensive than it
>>> used to be. Better, then, to always guard rather than kill performance
>>> later by accident.
>>
>> That's why I prefer a code review like this and discussion over it
>> instead of a common rule that we should blindly follow. Because rule
>> don't teach how to be a good programmer, discussion do. And if someone
>> did something that can impact performance, asking and explaining is
>> far better, than saying we have a rule. Because quite often what was
>> true for Java 1.4, isn't for 1.5 any more.
>>
>
> I'm with you on readability.
>
> I would agree with you regarding reviews if we had some mandatory code
> review mechanism in place, which is not the case. Actually I stumbled by
> accident about this commit, and I doubt that each commit gets reviewed
> either intensively enough or even at all. I've seen far to many
> programmers not knowing about parameter evaluation costs, and while we
> create some awareness here with this discussion, I'm sure it will be
> mostly forgot0ten six months from now :)
>
> If a "not so aware" committer would come across those guards all over
> the code base, I would tend to think that he'd either be lazy, by just
> adding his additional code within an existing guarded log statement, or
> ask in the dev list why he found all this crazy code that seems to be
> intentional.
>
> Personally, if I had to chose between improved readability and improved
> performance, I'd rather drop some readability...
>
> - René
>
> --
> René Gielen
> IT-Neering.net
> Saarstrasse 100, 52062 Aachen, Germany
> Tel: +49-(0)241-4010770
> Fax: +49-(0)241-4010771
> Cel: +49-(0)163-2844164
> http://twitter.com/rgielen
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
> For additional commands, e-mail: dev-h...@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to