commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Doug Bateman <>
Subject LogFactory.getLog()
Date Sat, 07 Aug 2010 02:11:01 GMT
Dear Commons Developers,

Here's a suggestion for the commons-logging package...

Presently, in Apache Commons, the most common way to get a logger is to do
something like:

public class MyClass {
    private static Log log = LogFactory.getLog(MyClass.class);

Notice how MyClass.class (or alternatively a string name) is passed as a
parameter.  The annoying aspect of this is that sometimes the class name
doesn't get updated when doing copy/paste operations.  A desirable
alternative might be:

public class MyClass {
    private static Log log = LogFactory.getLog(); //class name inferred from
call stack

With such an approach there are two possible concerns I can foresee:

   - Call stack inspection isn't terribly fast.  However since Loggers are
   generally initialized only once, when the class is first loaded, performance
   isn't likely to be a major problem.
   - Commons-logging is Java 1.1 compatible.  Thus care must be taken to
   ensure compatibility isn't broken.
   - Commons-logging doesn't depend on commons-lang, and thus the utilities
   in commons-lang cannot be used.

In Java 1.4, the call stack is easily obtained using Thread.getCallStack().
Prior to Java 1.4, the only way to obtain the call stack is to inspect the
stack trace of an exception.

I've attached to this email a proof of concept implementation.  It tests
successfully in Java 1.0+ and Java 1.4+.  In order to ensure the
implementation doesn't break for Java 1.0, I used reflection to invoke the
Java 1.4 APIs when they are available.


View raw message