LOG4J的问题

请教个LOG4J的问题,
象我象在任何地方都用log.info,
那么象public static Log log=LogFactory.getLog(xxx.class)
这里,如何才能写成通用的呢,主要是每个类的类名都不同的哦

[code="java"]public static Log log=LogFactory.getLog(xxx.class) [/code]

这是static的,又想与 每一个Class的关联。不太行。

去掉static,就可以了。

[code="java"]public Log log=LogFactory.getLog(this.getClass())
// 或者
public Log log=Logger.getLog(this.getClass())[/code]

一般都是这么用的呀.
不过要是把static去掉, 写成public Log log=LogFactory.getLog(this.getClass()), 就统一了. 对静态方法不能这么写了.

或者写个通过的日志接口,如LogUtls.info(message) , 但这是对于打印的类的函数名和位置有些问题, 需要自己处理

[b]参考spring框架中的写法:[/b]
在继承的状态下

[code="java"]public class Test

public void m() {

this.getClass();

}

}

public class SubTest extends Test {

} [/code]

如果调用[code="java"]new SubTest().m();[/code]则上述的this.getClass是[color=red]返回SubTest而不是Test的[/color].

因此,

LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。

spring 里的代码+注释是这样的:

[code="java"]/** Logger available to subclasses */
protected final Log logger = LogFactory.getLog(getClass());[/code]

当没不需要给其他子类用的时候,一般是这样写的:

[code="java"]private static final Log logger = LogFactory.getLog(Test.class);[/code]
It asks the log factory to find an existing logger for the current class namespace but create a new one if not found. I usually use "private static final" modifiers for my loggers, as I assume all loggers are thread safe singletons.

[code="java"][/code]