Mandy,<br><br>first I would like to have the given patch applied to OpenJDK 8 (+ JDK7u) as it fixes many problems:<br>- string concatenations<br>- object creations (Object[] or other objects given as params)<br>- method calls in log statements<br>
<br>In a second step, I can help somebody migrating JUL usages to PlatformLogger but it requires PlatformLogger API changes (logp to give class and method names)...<br><br>Other comments below:<br><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
    <br>
    Peter&#39;s idea is a good one to add a couple of convenient methods to
    take Object parameters that will avoid the creation of array
    instances.  I&#39;d also like to know what variants being used in the
    jdk to determine the pros and cons of the alternatives (this issue
    also applies to java.util.logging).<br></div></blockquote><div><br>50% of given object parameters are created via method calls so it will not be enough. <br><br>Moreover, I prefer having always isLoggable() calls to avoid me looking and understanding special cases (more than 2 args or no string concat ...); besides, it would be easier to implement code checks testing missing isLoggable() calls vs conditional and specific checks (string concat, more then 2 args, method calls ...)<br>
<br>Finally, I prefer having shorter and clearer method names like isFine(), isFinest() instead of isLoggable(PlatformLogger.FINE) that is quite &quot;ugly&quot; ...<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
    
    It was intentional to have PlatformLogger define only the useful
    methods necessary for jdk use.   The goal of PlatformLogger was to
    provide a light-weight utility for jdk to log debugging messages and
    eliminate the dependency to java.util.logging and avoid the
    unnecessary j.u.logging initialization (as disabled by default).  
    It was not a goal for PlatformLogger to be an exact mirror as
    java.util.logging.Logger.  My advice is to tune PlatformLogger to
    provide API that helps the platform implementation while avoid
    bloating the API.<br></div></blockquote><div><br>Agreed. <br><br>Maybe JUL Logger.logp(classname, methodname) usages should be rewritten to use PlatformLogger.getCallerInfo() instead:<br><span style="font-family:courier new,monospace">        // Returns the caller&#39;s class and method&#39;s name; best effort</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">        // if cannot infer, return the logger&#39;s name.</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">        private String getCallerInfo() {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">            String sourceClassName = null;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            String sourceMethodName = null;</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><b><span style="font-family:courier new,monospace">            JavaLangAccess access = SharedSecrets.getJavaLangAccess();</span><br style="font-family:courier new,monospace"></b><span style="font-family:courier new,monospace">            Throwable throwable = new Throwable();</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">            int depth = access.getStackTraceDepth(throwable);</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            String logClassName = &quot;sun.util.logging.PlatformLogger&quot;;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">            boolean lookingForLogger = true;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            for (int ix = 0; ix &lt; depth; ix++) {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                // Calling getStackTraceElement directly prevents the VM</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                // from paying the cost of building the entire stack frame.</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                StackTraceElement frame =</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                    access.getStackTraceElement(throwable, ix);</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                String cname = frame.getClassName();</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                if (lookingForLogger) {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                    // Skip all frames until we have found the first logger frame.</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                    if (cname.equals(logClassName)) {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                        lookingForLogger = false;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                    }</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                } else {</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                    if (!cname.equals(logClassName)) {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                        // We&#39;ve found the relevant frame.</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                        sourceClassName = cname;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                        sourceMethodName = frame.getMethodName();</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                        break;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                    }</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                }</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">            }</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            if (sourceClassName != null) {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                return sourceClassName + &quot; &quot; + sourceMethodName;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            } else {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">                return name;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">            }</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">        }</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    }</span><br style="font-family:courier new,monospace"> </div>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
    <br>
    Since you are touching some jdk files that use java.util.logging,
    would you like to contribute to convert them to use PlatformLogger:<br>
       <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7054233" target="_blank">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7054233</a><br>
    <br>
    It&#39;s perfectly fine to convert only some of them if not all.<br></div></blockquote><div><br>I want to help but as you said it should be done in collaboration because it requires API changes (JMX, RMI ...) but I prefer after this patch is reviewed and submitted and in coming weeks.<br>
 </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
    <br>
    Jim Gish is the owner of logging and will check with him if he has
    cycles to work with you on this.<br></div></blockquote><div><br>Great.<br><br>Cheers,<br>Laurent<br><br></div></div>