[ 
https://issues.apache.org/jira/browse/LOGGING-132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12795189#action_12795189
 ] 

Dennis Lundberg commented on LOGGING-132:
-----------------------------------------

I tried your suggestion, but there were a lots of test failures.
So changing this will have a larger impact than you thought.

> Jdk14Logger wrapper does not respect logger name
> ------------------------------------------------
>
>                 Key: LOGGING-132
>                 URL: https://issues.apache.org/jira/browse/LOGGING-132
>             Project: Commons Logging
>          Issue Type: Bug
>    Affects Versions: Nightly Builds, 1.0, 1.0.1, 1.0.3, 1.0.4, 1.1.0, 1.1.1
>            Reporter: Nathan Niesen
>            Priority: Minor
>
> The JDK14 wrapper implementation logs using the callers class name instead of 
> the configured logger name. This prevents the ability to use named loggers 
> for applications and subsystems. Also, the log message name does not match 
> the JDK logger name so user don't know what name to use to configure the 
> logger. It is also problematic for obfuscated code and private parts of an 
> application or library.
> Example:
> I have a class named com.myco.product.subsysa.ClassX.InnerClassY and I create 
> logger LogFactory.getLog("SubSystemA").
> With the other log wrappers, if I log a message I always get something like:
>     Oct 21, 2009 5:03:26 PM
>     [INFO] SubSystemA start - My log message
> With the JDK log wrapper, I get something like:
>     Oct 21, 2009 5:03:26 PM com.myco.product.subsysa.ClassX$InnerClassY start
>     INFO: My log message
> Or worse yet with obfuscated code and the JDK log wrapper, I get something 
> like:
>     Oct 21, 2009 5:03:26 PM 
> com.myco.product.subsysa.ClassX$_oOOO.o00000000000000000000000000000
> 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 00000000000000000000000000000000000000000000000000000000
>     INFO: My log message
> The fix:
> In the calls to logger.logp(...), replace cname with this.name. Loggers 
> created with the class name will still get the class name.
> {code}
>     private void log( Level level, String msg, Throwable ex ) {
>         Logger logger = getLogger();
>         if (logger.isLoggable(level)) {
>             // Hack (?) to get the stack trace.
>             Throwable dummyException=new Throwable();
>             StackTraceElement locations[]=dummyException.getStackTrace();
>             // Caller will be the third element
>             String cname="unknown";
>             String method="unknown";
>             if( locations!=null && locations.length >2 ) {
>                 StackTraceElement caller=locations[2];
>                 cname=caller.getClassName();
>                 method=caller.getMethodName();
>             }
>             if( ex==null ) {
>                 logger.logp( level, cname, method, msg );
>             } else {
>                 logger.logp( level, cname, method, msg, ex );
>             }
>         }
>     }
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to