[slf4j-user] Java 5 version of SLF4J?

Joern Huxhorn jhuxhorn at bpinteractive.com
Mon Apr 28 12:33:00 CEST 2008


Ceki Gulcu wrote:
> 
> Joern Huxhorn wrote:
>> Simon Kitching wrote:
>>> The SLF4J fake-varargs approach, where the api allows 0,1 or 2 params is
>>> slightly better, as it avoids the "new Object[]" call. But for best
>>> performance, isDebugEnabled should be used anyway.
>>>
>>> Regards,
>>> Simon
>> Hi Simon.
>>
>> The above isn't the case for logback since calls with explicit arguments 
>> (instead of argument array) are simply wrapped in an Object[] and 
>> forwarded to the Object[]-implementation of the method.
>>
>> Joern.
> 
> Hello Joern, Hello Simon,
> 
> 
> I just quickly looked at the code and I believe that parameters are
> aggregated into Object[] *after* a decision is made to log. Filters in
> appenders may override this decision, but that happens much later in
> the processing pipeline.
> 
> As for Simon's argument that the extra parameters need to be pushed
> onto the execution stack, I think that pushing one or two arguments
> onto the stack takes about or less than a nanosecond on most machines,
> hardly noticeable even if you log millions of times a second.
> Creating an Object[] takes about 20 nanoseconds, a lot more than
> pushing a parameter but still only 20 nanoseconds.
> 
> Cheers,
> 

Hi Ceki.

I didn't mean to imply that anything is wrong or inefficient with the 
current implementation in Logback. I only meant that an Object[] *is* 
created after the decision if logging should actually happen - which is 
absolutely necessary anyway because LoggingEvent needs the parameters in 
an Object[] anyway.

It's just not the case - and I thought that's what Simon was thinking - 
that there is a special, optimized version of the logging methods that 
do not use an Object[] at all.

Joern.




More information about the slf4j-user mailing list