有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Log4j在基类中创建日志实例

假设层次结构中的所有类都只有默认构造函数,那么下面创建日志实例的问题是什么

 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) 个答案

  1. # 1 楼答案

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

    您需要:

    • 使“log”字段成为非静态字段(可能是您想要的,因为您使用getClass()对其进行命名)。getName()),或
    • 在声明中对其进行初始化,例如受保护的静态日志=日志工厂。getLog(AbstractClass.class)