[
https://issues.apache.org/jira/browse/LOGGING-132?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nathan Niesen updated LOGGING-132:
----------------------------------
Affects Version/s: 2.0
1.1.2
1.0.2
> 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.2, 1.0.3, 1.0.4, 1.1.0,
> 1.1.1, 1.1.2, 2.0
> 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.