I've liked the log4j Logger except for two things. The first is that I have
to pass my class name to the logger when I get it, for example:
private static Logger myLogger = Logger.getLogger(MyClass.class);
This is fine but it is prone to cut and paste errors. A better solution is
to add the following getLogger method to Logger:
static
public
Logger getLogger() {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
int I;
for (I = 0; I < stack.length; I++) {
if (stack[I].getClassName().equals("org.apache.log4j.Logger")) {
break;
}
}
return (getLogger(stack[I+1].getClassName()));
}
This will use the stack to see what class it is inside of. Now all of my
classes can have the following:
private static Logger myLogger = Logger.getLogger();
No cut and paste errors.
The other issue with log4j is with building parametrized debug messages.
The documentation explains, correctly, that I should not do the following:
myLogger.debug("This is my debug value "+myObject);
This causes a StringBuffer to be built even though the call does not do
anything when I'm not logging debug events. A simple solution would be to
have a parametrized debug method such as
public void debug(String msg, Object... params);
The implementation doesn't have to be fancy, maybe something similar to
MessageFormat. This would let me pass the following:
myLogger.debug("This is my debug value {0}", myObject);
Now nothing is processed unless I'm logging debug events.
Thanks
Brian