我正在做一个项目,目前正在用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");
}
}什么更有意义?为什么?
发布于 2012-08-28 21:44:50
我也不会这么做。相反,我会让它在这两种情况下都使用正确的类。
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()); }
...
}如果有一个类经常调用它,你可以重写它来给你一个缓存的实例。
发布于 2015-04-08 16:20:26
这是我的解决方案(最终的静态记录器):
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");
}
}发布于 2012-08-28 21:48:58
两者都是有意义的。这取决于您的应用程序。
我认为更常用的做法是为每个类设置私有记录器。这允许您为每个类和每个包配置日志记录。请记住,AbstractFoo和Foo可能属于不同的包,您可能只想查看来自Foo的日志。
此外,如果你想写protected字段,一定要三思而后行。这并不是完全禁止的,但却是众所周知的坏习惯。这会降低代码的可读性和维护难度。
https://stackoverflow.com/questions/12160540
复制相似问题