[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  
>> 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,  

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,  
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.


-------------- 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