请教个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]