假設有如下标準化的目錄結構:
$HOME
|-- log
|-- conf
|-- bin
|-- lib
|-- data
jar包放在lib目錄,啟動腳本放在bin目錄,日志檔案放在log目錄,配置檔案放在conf目錄(包括log4j的配置檔案log4j.properties)。
在程式代碼和配置檔案中均不定義絕對目錄如:/usr/local/myapp/log/myapp.log和/usr/local/myapp/conf/log4j.properties等。
那麼在代碼中可以如下實作:
String path = System.getProperty("java.class.path");
int first_index = path.lastIndexOf(System.getProperty("path.separator")) + 1;
int last_index = path.lastIndexOf(File.separator) + 1;
path = path.substring(first_index, last_index);
System.setProperty("myhome", path); // "myhome"供log4j.properties使用
PropertyConfigurator.configure(path + "/conf/log4j.properties");
log4j.properties中的日志檔案路徑配置為:
log4j.appender.stdout.File=${myhome}/log/myapp.log
這樣不管在哪兒啟動,都可以保持日志檔案和配置檔案路徑不随變化。