sus*_*ani 2 java singleton log4j
我们必须在我们的应用程序中引入日志.我们决定使用log4j是一个不错的选择.还有人告诉我们应该使用单例模式来使用log4j可以有人强调如何以及为什么?
在单例模式中,该Logger字段对于类是静态的:
public class SomeAwesomeClass {
private static final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使Logger字段非静态(即每个实例的实例都SomeAwesomeClass引用Logger):
public class SomeAwesomeClass {
private final Logger logger = Logger.getLogger(SomeAwesomeClass.class);
}
Run Code Online (Sandbox Code Playgroud)
我不认为你选择哪条路线会产生很大的不同,因为我相信Log4j会不断Logger为每个实例返回相同的实例SomeAwesomeClass.实际上,它只是不必要的对象引用,所以你不妨使用单例模式.
但是,如果您执行以下操作,则非单例模式变得必要:
public class SomeAwesomeClass {
private final Logger logger = Logger.getLogger(getClass());
public void doSomething() {
log.info("Doing something");
}
}
public class AwesomerClass extends SomeAwesomeClass {
}
Run Code Online (Sandbox Code Playgroud)
后来...
SomeAwesomeClass o = new AwesomerClass();
o.doSomething();
Run Code Online (Sandbox Code Playgroud)
在此示例中,该logger字段将对应于AwesomerClass,而不是SomeAwesomeClass.
| 归档时间: |
|
| 查看次数: |
10577 次 |
| 最近记录: |