Log4j在基类中创建日志实例

时间:2012-10-30 02:48:45

标签: java logging log4j

假设层次结构中的所有类都只有默认构造函数,那么创建Log实例的问题如下:

 public abstract class AbstractService {


    protected static Log log=null;


    public AbstractService(){
        log=LogFactory.getLog(this.getClass().getName());
    }

    public void foo(){      
        log.debug("base foo() : ");
    }

}


class ServiceA extends AbstractService {    

    public void foo(){
        super.foo();

        log.debug("Overloaded foo() in ServiceA");      
    }
}


class ServiceB extends AbstractService {
    public void foo(){
        super.foo();
        log.debug("Overloaded foo() in ServiceB");      

    }
} 

1 个答案:

答案 0 :(得分:3)

鉴于“log”字段是静态的(即与AbstractService类相关联),不应该从构造函数(与该类的特定实例相关联)中设置它。

您需要:

  • 使“log”字段非静态(可能是您的意图,假设您使用getClass()。getName())或
  • 命名它
  • 在其声明中对其进行初始化,例如: protected static Log log = LogFactory.getLog(AbstractClass.class);