其中“${WORKDIR}/”是個變量,會被System Property中的“WORKDIR”的值代替。這樣,我們就可以在log4j加載配置文件之前,先用System.setProperty ("WORKDIR", WORKDIR);設置好根路徑,此操作可通過一初始的servlet進行。
方法二、可以使用服務器環境變量
log4j的配置文件支持服務器的vm的環境變量,格式類似${catalina.home}
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log
log4j.appender.R.MaxFileSize=10KB
其中的${catalina.home}並非windows系統的環境變量,這個環境變量就不需要在Windows系統的環境變量中設置。之所以這樣,你可以看看tomcat\bin\catalina.bat(startup,shutdown都是調用這個)里面自帶有-Dcatalina.home= "%CATALINA_HOME%" 。繼承這個思想,所以你也可以自己設定一個參數-Dmylog.home="D:/abc/log"到對應的服務器java啟動的vm參數中
方法三、通過servlet初始化init()方法中加載file屬性實現相對路徑
具體實現:做一個servlet,在系統加載的時候,就把properties的文件讀到一個properties文件中.那個file的屬性值(我使用的是相對目錄)改掉(前面加上系統的根目錄),讓后把這個properties對象設置到propertyConfig中去,這樣就初始化了log的設置.在后面的使用中就用不着再配置了
一般在我們開發項目過程中,log4j日志輸出路徑固定到某個文件夾,這樣如果我換一個環境,日志路徑又需要重新修改,比較不方便,目前我采用了動態改變日志路徑方法來實現相對路徑保存日志文件
catalina.home和catalina.base這兩個屬性僅在你需要安裝多個Tomcat實 例而不想安裝多個軟件備份的時候使用,這樣能節省磁盤空間。
以Tomcat6.0為例,其Tomcat目 錄結構如下:
bin (運行腳本)
conf (配置文件)
lib (核心庫文件)
logs (日志目錄)
temp (臨時目錄)
webapps (自動裝載的應用程序的目錄)
work (JVM臨時文件目錄[java.io.tmpdir])
讓 我們看看這些目錄那些可以被多個Tomcat實例公用,其實只有 bin 和 lib 目錄,其它目錄conf、logs、temp、webapps和work每個Tomcat實例必須擁有其自己獨立的備份。
明 白了上述關系就容易理解catalina.home和catalina.base的 用途了。
catalina.home指向公用信息的位置,就是bin和lib的父目 錄。
catalina.base指 向每個Tomcat目 錄私有信息的位置,就是conf、logs、temp、webapps和work的父目錄。
僅運行一個Tomcat實 例時,這兩個屬性指向的位置是相同的