首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用抽象类的Java日志记录

使用抽象类的Java日志记录
EN

Stack Overflow用户
提问于 2012-08-28 21:41:08
回答 6查看 40.2K关注 0票数 69

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

优先选项

对该类和所有子类使用超类中的单个日志:

代码语言:javascript
复制
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");
    }
}

第二个选项

对每个类、超级类和子类使用单独的日志:

代码语言:javascript
复制
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");
    }
}

什么更有意义?为什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-28 21:44:50

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

代码语言:javascript
复制
public abstract class AbstractFoo {
    protected final Log log = LogFactory.getLog(getClass());

    ...
}

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

如果您没有进行大量的日志记录(这无论如何都是一个好主意),那么您可以使用一种方法。

代码语言:javascript
复制
public abstract class AbstractFoo {
    protected Log log() { return LogFactory.getLog(getClass()); }

    ...
}

如果有一个类经常调用它,你可以重写它来给你一个缓存的实例。

票数 111
EN

Stack Overflow用户

发布于 2015-04-08 16:20:26

这是我的解决方案(最终的静态记录器):

代码语言:javascript
复制
public abstract class AbstractFoo {
     protected abstract Log getLogger();
     public doSomething() {
          getLogger().info("log something");
     }
}

public class Foo extends AbstractFoo {
    private static final Log log = Log.getLogger(Foo.class);

    protected Log getLogger() {
         return log;
    }
    public doSomethingElse() {
          log.info("log somethingElse");
    }
}
票数 14
EN

Stack Overflow用户

发布于 2012-08-28 21:48:58

两者都是有意义的。这取决于您的应用程序。

我认为更常用的做法是为每个类设置私有记录器。这允许您为每个类和每个包配置日志记录。请记住,AbstractFooFoo可能属于不同的包,您可能只想查看来自Foo的日志。

此外,如果你想写protected字段,一定要三思而后行。这并不是完全禁止的,但却是众所周知的坏习惯。这会降低代码的可读性和维护难度。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12160540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档