我有一些代碼是由30多個類組成的獨立Java應用程序。在獨立的java應用程序中使用相同的log4j記錄器
大多數這些繼承自一些其他基類。
每類都有這個方法來獲取和使用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éterTörök – 2010-06-14 15:29:01
@matt b概述的標準log4j用法 - 謝謝指出。我將檢查使用情況,因爲此代碼可能是從多個線程執行的。 – shinynewbike 2010-06-14 16:41:29