<font face="arial, helvetica, sans-serif">Sure, it uses an extension of the java.text.MessageFormat syntax that allows for unlimited formatted varargs, and allows using dot-notation to prevent evaluation of the methods until it's been deemed necessary.  With the current libraries (all of them really), you have to evaluate all the javabeans that hold the data you are looking to log before it's decided whether to log the information or not.  In other words:</font><div>

<font face="arial, helvetica, sans-serif"><br></font></div><div><div style="background-color:rgb(255,255,255)"><font face="'courier new', monospace">log.<font color="#00007f">debug</font>(<font color="#007f00">"Loading Student ["</font> + sdnt.<font color="#00007f">getNumber</font>() + <font color="#007f00">"] "</font> + sdnt.<font color="#00007f">getName</font>() + <font color="#007f00">" Enrolled: "</font> +<font color="#0000ff"> new</font> <font color="#00007f">SimpleDateFormat</font>(<font color="#007f00">"yyyy-MM-dd"</font>).<font color="#00007f">format</font>(sdnt.<font color="#00007f">getEnrollmentDate</font>()));</font></div>

<div style="background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br></font></div><div style="background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif">Means that a lot of work is done and discarded when the debug level on this file is set to info or less.  SLF4j is a little better, but not much:</font></div>

<div style="background-color:rgb(255,255,255)"><font face="arial, helvetica, sans-serif"><br></font></div><div style="background-color:rgb(255,255,255)"><div><font face="'courier new', monospace">log.<font color="#00007f">debug</font>(<font color="#007f00">"Loading Student [{}] {} Enrolled: {}"</font>,<font color="#0000ff">new</font> <font color="#0000ff">Object</font>[] {sdnt.<font color="#00007f">getNumber</font>(),sdnt.<font color="#00007f">getName</font>(),<font color="#0000ff">new</font> <font color="#00007f">SimpleDateFormat</font>(<font color="#007f00">"yyyy-MM-dd"</font>).<font color="#00007f">format</font>(sdnt.<font color="#00007f">getEnrollmentDate</font>())});</font></div>

<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Yes, of course you could (and probably should) wrap each and every call to the log system in </font><font face="'courier new', monospace"><font color="#3333ff">if</font>(<font color="#000099">log</font>.isDebugEnabled()) {}</font><font face="arial, helvetica, sans-serif">.  But we all know that is ugly and easy for Jr programmers to forget.  My library puts off the evaluation until after it's been decided that the information is necessary, then efficiently outputs the message, like this:</font></div>

<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="'courier new', monospace">log.<font color="#00007f">debug</font>(<font color="#007f00">"Loading Student [{0.number}] {<a href="http://0.name">0.name</a>} Enrolled: {0.enrollmentDate,date,yyyy-MM-dd}"</font>,student);
</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">No muss, no fuss and the TextFormat utility is completely usable standalone (as well as the advanced dot-notation utilities).</font></div>

<div><font face="arial, helvetica, sans-serif">  (*Chris*)</font></div></div><br><div class="gmail_quote">2012/2/13 Thorbjørn Ravn Andersen <span dir="ltr"><<a href="mailto:thunderaxiom@hotmail.com">thunderaxiom@hotmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="DA" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Could you summarize your solution briefly here for the completeness of the archives?<u></u><u></u></span></p>

<p class="MsoNormal"><a name="1357612b5133d47f__MailEndCompose"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p><p class="MsoNormal">

<span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(Personally I’d just be happy with a resolution so I can easily have more than two {}-arguments)<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">/Thorbjørn<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">

<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a> [mailto:<a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a>] <b>On Behalf Of </b>Chris Pratt<br>

<b>Sent:</b> 9. februar 2012 17:16</span></p><div><div class="h5"><br><b>To:</b> logback users list<br><b>Subject:</b> Re: [logback-user] Compiler selecting wrong Logger method<u></u><u></u></div></div><p></p></div><div>
<div class="h5">
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p>Well, I'd be happy to throw my solution in as an option.  You, and Ceki, can find more information at <a href="http://code.google.com/p/anodyzed" target="_blank">http://code.google.com/p/anodyzed</a> There's information in the wiki documents and more on the way when I get a chance.  If there's any information you think is missing, please don't hesitate to let me know and I'll do what I can to remedy the situation.  Thanks.<br>

  (*Chris *)<u></u><u></u></p><div><p class="MsoNormal">On Feb 9, 2012 1:00 AM, "Thorbjørn Ravn Andersen" <<a href="mailto:thunderaxiom@hotmail.com" target="_blank">thunderaxiom@hotmail.com</a>> wrote:<u></u><u></u></p>

<p class="MsoNormal">Ceki has not yet decided on the proper way to do varargs in slf4j.  Until<br>then, no official API.<br><br>See <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=31" target="_blank">http://bugzilla.slf4j.org/show_bug.cgi?id=31</a> for the full history.<br>

<br>/Thorbjørn<br><br>-----Original Message-----<br>From: <a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a> [mailto:<a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a>] On<br>

Behalf Of Stein, Eric<br>Sent: 6. februar 2012 14:24<br>To: logback users list<br>Subject: Re: [logback-user] Compiler selecting wrong Logger method<br><br><sigh/> I'm a nitwit. I got confused because at my last job we used a<br>

wrapper around slf4j, and the signature of the method was debug(String,<br>Object...). Out of curiosity, is there a reason why that format wasn't used?<br>The compiler should be smart enough to call the more specific debug(String,<br>

Object, Object) when appropriate. Changing from Object[] to Object... should<br>also be backwards-compatible...<br><br>Thanks, Marco!<br><br>Eric<br><br>-----Original Message-----<br>From: <a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a> [mailto:<a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a>]<br>

On Behalf Of BRESCIANI, MARCO (MARCO)<br>Sent: Monday, February 06, 2012 8:12 AM<br>To: logback users list<br>Subject: Re: [logback-user] Compiler selecting wrong Logger method<br><br>If I'm not wrong, using - Object[] - or the variable list - Object... - is a<br>

bit different and in order to have the correct method, you should write<br>this:<br><br>       LOGGER.debug("Hi {} {} {}", new Object[] { arg1, arg2, arg3 });<br><br><br><br>MARCO BRESCIANI<br>ALCATEL-LUCENT<br>

SENIOR SW CRAFT TERMINAL DEVELOPMENT ENG NETWORKS - IP DIVISION WT PRODUCT<br>UNIT via Trento, 30 - 20059 Vimercate (MB) - Italy<br>Phone: <a href="tel:%2B39%20039%20686%206279" target="_blank">+39 039 686 6279</a><br>Fax: <a href="tel:%2B39%20039%20686%205600" target="_blank">+39 039 686 5600</a><br>

<a href="mailto:Marco.Bresciani@alcatel-lucent.com" target="_blank">Marco.Bresciani@alcatel-lucent.com</a><br><br>-----Original Message-----<br>From: <a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a> [mailto:<a href="mailto:logback-user-bounces@qos.ch" target="_blank">logback-user-bounces@qos.ch</a>]<br>

On Behalf Of Stein, Eric<br>Sent: Monday, February 06, 2012 1:59 PM<br>To: <a href="mailto:logback-user@qos.ch" target="_blank">logback-user@qos.ch</a><br>Subject: [logback-user] Compiler selecting wrong Logger method<br>

<br>I'm seeing a funny error when trying to write to logback.<br>       import org.slf4j.Logger;<br>       import org.slf4j.LoggerFactory;<br><br>       final String arg1 = "arg1";<br>       final String arg2 = "arg2";<br>

       final String arg3 = "arg3";<br>       LOGGER.debug("Hi {} {}", arg1, arg2);<br>       LOGGER.debug("Hi {} {} {}", new String[] { arg1, arg2, arg3 });<br>       LOGGER.debug("Hi {} {} {}", arg1, arg2, arg3);<br>

<br>The last line is giving this error message:<br><br>The method debug(Marker, String, Object, Object) in the type Logger is not<br>applicable for the arguments (String, String, String, String)<br><br>I don't see why it isn't using the method whose signature is debug(String,<br>

Object[]), especially given that I'm not using a Marker.<br>I'm running in Eclipse Indigo, and my classpath looks like this:<br><br>logback-classic-1.0.0.jar<br>logback-core-1.0.0.jar<br>slf4j-api-1.6.4.jar<br><br>

Does anybody know why the compiler is using the wrong method?<br><br>Thanks,<br>Eric Stein<br>_________________________________________________<br>Don't gamble with your environmental information. Learn how the world's<br>

largest on-demand environmental information management system can help you<br>mitigate your operating risk: <a href="http://www.locustec.com" target="_blank">www.locustec.com</a>.<br><br>_______________________________________________<br>

Logback-user mailing list<br><a href="mailto:Logback-user@qos.ch" target="_blank">Logback-user@qos.ch</a><br><a href="http://mailman.qos.ch/mailman/listinfo/logback-user" target="_blank">http://mailman.qos.ch/mailman/listinfo/logback-user</a><br>

_________________________________________________<br>Don't gamble with your environmental information. Learn how the world's<br>largest on-demand environmental information management system can help you<br>mitigate your operating risk: <a href="http://www.locustec.com" target="_blank">www.locustec.com</a>.<br>

<br>_______________________________________________<br>Logback-user mailing list<br><a href="mailto:Logback-user@qos.ch" target="_blank">Logback-user@qos.ch</a><br><a href="http://mailman.qos.ch/mailman/listinfo/logback-user" target="_blank">http://mailman.qos.ch/mailman/listinfo/logback-user</a><br>

<br>_______________________________________________<br>Logback-user mailing list<br><a href="mailto:Logback-user@qos.ch" target="_blank">Logback-user@qos.ch</a><br><a href="http://mailman.qos.ch/mailman/listinfo/logback-user" target="_blank">http://mailman.qos.ch/mailman/listinfo/logback-user</a><u></u><u></u></p>

</div></div></div></div></div><br>_______________________________________________<br>
Logback-user mailing list<br>
<a href="mailto:Logback-user@qos.ch">Logback-user@qos.ch</a><br>
<a href="http://mailman.qos.ch/mailman/listinfo/logback-user" target="_blank">http://mailman.qos.ch/mailman/listinfo/logback-user</a><br></blockquote></div><br></div>