【发布时间】:2010-06-14 14:32:06
【问题描述】:
我有一些代码是一个独立的 Java 应用程序,包含 30 多个类。
其中大部分继承自其他一些基类。
每个类都有这个方法来获取和使用 log4j 记录器
public static Logger getLogger() {
if (logger != null) return logger;
try {
PropertyUtil propUtil = PropertyUtil.getInstance("app-log.properties");
if (propUtil != null && propUtil.getProperties() != null)
PropertyConfigurator.configure(propUtil.getProperties ());
logger = Logger.getLogger(ExtractData.class);
return logger;
} catch (Exception exception) {
exception.printStackTrace();
}
}
A) 我的问题是,是否应该将其重构为一些常见的记录器,该记录器被初始化一次并被所有类使用?这是更好的做法吗?
B) 如果是,怎么做?如何传递记录器?
C) 这实际上在代码中使用的不是Logger.debug(),而是getLogger().debug()。
这对性能有什么影响?
【问题讨论】:
-
我可能错了,但我不认为 PropertyConfigurer.configure() 是线程安全的 - 所以如果你的代码是多线程的,从多个线程调用这个 getLogger() 方法可能会导致问题。最好使用 Péter Török 概述的标准 log4j 用法
-
@matt b - 感谢您的指出。我会检查使用情况,因为这段代码可能是从多个线程执行的