假设有如下标准化的目录结构:
$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等。
那么在代码中可以如下实现:
log4j.properties中的日志文件路径配置为:
log4j.appender.stdout.File=${myhome}/log/myapp.log
这样不管在哪儿启动,都可以保持日志文件和配置文件路径不随变化。
$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.appender.stdout.File=${myhome}/log/myapp.log
这样不管在哪儿启动,都可以保持日志文件和配置文件路径不随变化。