[logback-user] Throwable with Java 1.6 Style?

Joern Huxhorn jhuxhorn at googlemail.com
Sun Sep 14 15:35:03 CEST 2008


On 13.09.2008, at 12:59, Ceki Gulcu wrote:

> Thorbjørn Ravn Andersen wrote:
>> Ceki Gulcu skrev  den 12-09-2008 20:47:
>>> Eric Faden wrote:
>>>
>>>> Why is there no way to do something like...
>>>>
>>>> logger.error("blah blah {} blah", exception, object);
>>>>
>>>> It seems that the only way to pass that in to the logger is to use
>>>>
>>>> if (logger.isErrorEnabled()) logger.error("blah blah " +
>>>> object.toString() + " blah", e);
>>>>
>>>> or am I mistaken?  It seems that this would be a useful function  
>>>> to make
>>>> available.
>>>>
>>> No, you are right. Blame the SLF4J API. Those morons!
>>>
>>>
>> I think I'd better elaborate a bit on Ceki's rather brief  
>> explanation :)
>>
>> It is notoriously hard to evolutionarily improve an API and get it
>> exactly right at all the intermediate steps.
>>
>> The question is how this _could_ be implemented at all without  
>> starting
>> looking at the individual objects in a varargs and do stuff  
>> depending on
>> their type (essentially putting the method selection in javac based  
>> on
>> method signature inside slf4j instead), as there is the vararg  
>> putting
>> stuff in a Object array (and exceptions  are objects).
>>
>> If then the last argument is an exception THEN it should be  
>> interpreted
>> traditionally with a stacktrace, but then you cannot stuff it in a
>> placeholder (to get the string representation in the message).
>>
>> What this means is basically that the current syntax breaks down, and
>> perhaps that another approach is appropriate.  Feel free to open a  
>> JIRA
>> issue if you feel this is important enough.
>
> Pour your information, Joern Huxhorn has already filed a bug report  
> on this topic
>   http://bugzilla.slf4j.org/show_bug.cgi?id=70
>
>
> -- 
> Ceki Gülcü
> Logback: The reliable, generic, fast and flexible logging framework  
> for Java.
> http://logback.qos.ch
> _______________________________________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://qos.ch/mailman/listinfo/logback-user

I've recently added that functionality to Lilith ( http://lilith.huxhorn.de/ 
  ) in a pretty transparent way, i.e. the above code would have to  
look like this:
if (logger.isErrorEnabled()) logger.error("blah blah {} blah", object,  
e);

The last argument is used as the Throwable *IF* it is not used up by a  
placeholder already.
So if (logger.isErrorEnabled()) logger.error("blah blah {} blah {}",  
object, e); would not use e as the Throwable. If you'd like to use  
both the String representation and the Throwable you'd have to give it  
as an argument twice if (logger.isErrorEnabled()) logger.error("blah  
blah {} blah {}", object, e, e);

Please keep in mind that e is simply ignored at the moment in case of
if (logger.isErrorEnabled()) logger.error("blah blah {} blah", object,  
e);
so I think this is a pretty compatible enhancement.

So if you use Lilith and you are using one of the Lilith appenders  
you'll get what you expect.

Joern.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://qos.ch/pipermail/logback-user/attachments/20080914/37f03692/attachment.htm 


More information about the Logback-user mailing list