我用log4j的写法大概是最常见的,即在类中加上一句:
static Logger logger = Logger.getLogger(MyClass.class.getName());
然后在后面就可以:
logger.info("要显示的文字");但是每个类中都要加这句话,就比较烦,应用中有很多action类都继承了BaseAction,因此我想能不能只加到基类,于是我这样写:import org.apache.log4j.Logger;
public abstract class BaseAction {
protected Logger log(){
return Logger.getLogger(this.getClass().getName());
}
}在具体的action类中则只需要用this.log().info("")就直接输出了,这样写:public class MyAction extends BaseAction{
  public Object execute(HttpServletRequest request){
    this.log().info("要显示的文字");
    
    this.log().info("另一行要显示的文字");
    
  }
}这样用可以,而且显示的类名是子类的,完全符合预期。但我怀疑我的写法,是否子类中每一句this.log().info("")父类都会创建一个logger对象?如果是这样就得不偿失了,没必要因方便损失性能。请问我的怀疑对不对?有没有更优雅的作法?谢谢!
是否应让log()方法成为static的?注意我的应用使用了spring,默认的每个action子类都是singleton的。