一尘不染

使用抽象类进行Java日志记录

java

我正在做一个项目,目前正在用log4j实现一些日志记录,我很好奇我应该如何实现日志。我要介绍的两个实现如下:

第一选择

将超类的单个日志用于该类和所有子类:

public abstract class AbstractFoo {
    protected static Log LOG = LogFactory.getLog(AbstractFoo.class);

    ...
}

public class Foo extends AbstractFoo {
    public void someMethod() {
        LOG.info("Using abstract log");
    }
}

第二种选择

为每个类,上级和下级使用单独的日志:

public abstract class AbstractFoo {
    private static Log LOG = LogFactory.getLog(AbstractFoo.class);

    ...
}

public class Foo extends AbstractFoo {
    private static Log LOG = LogFactory.getLog(Foo.class);

    public void someMethod() {
        LOG.info("Using own log");
    }
}

什么更有意义,为什么?


阅读 448

收藏
2020-12-03

共1个答案

一尘不染

我也不会 相反,我会在两种情况下都使用正确的类。

public abstract class AbstractFoo {
    protected final Log log = LogFactory.getLog(getClass());

    ...
}

public class Foo extends AbstractFoo {
    public void someMethod() {
        log.info("Using abstract log");
    }
}

如果您不进行大量日志记录(无论如何是个好主意),则可以改用一种方法。

public abstract class AbstractFoo {
    protected Log log() { return LogFactory.getLog(getClass()); }

    ...
}

如果有一个类经常调用它,则可以覆盖它以提供一个缓存的实例。

2020-12-03