2011-01-28 65 views
5

我在我的應用程序中使用Log4j。 log4j.properties放置在classpath中的Jar中。這個配置文件正在使用,大多數時候都能正常工作。配置Log4j屬性路徑的最佳實踐

但有時候,生成的日誌語句不是按照配置文件。

我的理解是,這是因爲屬性文件是從類路徑中獲取的。無論第一個屬性文件是什麼,都會被log4j讀取並使用。因此有時我們會得到與屬性文件中配置的日誌語句不同的日誌語句。

在的情況下,上述理由是真實的,那麼我認爲,我們需要通過下列方式之一明確指定配置文件:

  1. 指定使用系統屬性: -Dlog4j.configuration =的log4j .properties
  2. 正在初始化Log4jInit servlet。

請建議哪一個可能是更好的方法。

回答

6

在我的應用程序中,我使用${user.home} dir來存儲log4j.properties並使用ant,我們正在閱讀它。它將獨立於平臺。你也可以在classpath中傳遞一個build,但是從$ {user.home}中讀取是更好的方法,你或任何非技術人員都可以輕鬆訪問它。

也可以使用

動態日誌文件的位置

許多人抱怨說Log4j的力量,你硬編碼在您的日誌將被保存的位置。實際上,可以動態選擇日誌文件位置,特別是如果您使用上面的$ {log.dir}屬性替換技術。具體方法如下:

String dynamicLog = // log directory somehow chosen... 
Properties p = new Properties(Config.ETC + "/log4j.properties"); 
p.put("log.dir", dynamicLog); // overwrite "log.dir" 
PropertyConfigurator.configure(p); 

請參見

+0

謝謝!這將有所幫助。你能否也請確認我的理解是否正確,獲得「不需要」的日誌聲明的原因? – 2011-01-28 06:53:20

2

當墊子搜索項目在classpath文件的第一實例清名稱被使用。因此,將您的.jar添加到前面。

set CLASSPATH=myfile.jar;%CLASSPATH%