2009-05-17 102 views
13

我正在使用Apache Commons Logging和SLF4J與log4j,但我也想在自定義位置(如conf/log4.properties)中使用log4j.properties。這裏的問題是:在自定義位置的Log4j屬性

如果我使用

PropertyConfigurator.configure("conf/log4j.properties"); 

然後我的應用程序依賴於Log4J和違背了ACL和SLF4J的目的。

在沒有應用程序知道日誌實現是什麼的情況下配置它的最佳方式是什麼?

回答

24

我認爲最簡單的事情就是使用log4j.configuration系統屬性指定文件的位置。採用的例子在Log4J manual

java -Dlog4j.configuration=conf/log4j.properties -classpath ... 

相信的Log4J會發現一個名爲類路徑上的「log4j.properties」隨處文件,但可能會產生幻覺。值得嘗試,但是。

+9

其實,我有同樣的問題作爲OP,但您的解決方案並沒有爲我工作。我必須以URL風格的形式(-Dlog4j.configuration = file:///my/conf/log4j.properties)指定log4j.properties文件的位置。 – Haes 2009-10-27 14:22:51

3

正如您所述,通過調用PropertiesConfigurator,您將您的應用程序綁定到log4j。然而,這個領帶的延伸是相當有限的。你可以很容易地刪除調用PropertiesConfigurator的行並重新編譯你的代碼。完成之後,假設您正在使用SLF4J API進行日誌記錄,則可以使用另一個日誌記錄框架(例如logback-classic或j.u.l)來重新生成log4j。只是通過替換jar文件。因此,SLF4J仍然在很大程度上爲其目的服務。我不會用洗澡水把嬰兒扔掉。

1

您可以使用VM參數指定配置文件的位置

-Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties"