歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Log4j中配置日志文件相對路徑

Log4j中配置日志文件相對路徑

日期:2017/2/28 14:28:09   编辑:Linux教程

方法一、 解決的辦法自然是用相對路徑代替絕對路徑,其實log4j的FileAppender本身就有這樣的機制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log
其中“${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日志輸出路徑固定到某個文件夾,這樣如果我換一個環境,日志路徑又需要重新修改,比較不方便,目前我采用了動態改變日志路徑方法來實現相對路徑保存日志文件
(1).在項目啟動時,裝入初始化類:
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {
}

public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/");
String file = config.getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
try {
FileInputStream istream = new FileInputStream(filePath);
props.load(istream);
istream.close();
//toPrint(props.getProperty("log4j.appender.file.File"));
String logFile = prefix + props.getProperty("log4j.appender.file.File");//設置路徑
props.setProperty("log4j.appender.file.File",logFile);
PropertyConfigurator.configure(props);//裝入log4j配置信息
} catch (IOException e) {
toPrint("Could not read configuration file [" + filePath + "].");
toPrint("Ignoring configuration file [" + filePath + "].");
return;
}
}

public static void toPrint(String content) {
System.out.println(content);
}
}
實際上log4j的配置文件log4j.properties如為默認名,可放置在JVM能讀到的classpath裡的任意地方,一般是放在WEB- INF/classes目錄下。當log4j的配置文件不再是默認名,則需要另外加載並給出參數,如上 “ropertyConfigurator.configure(props);//裝入log4j配置信息”

(2).Web.xml中的配置
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

注意:上面的load-on-startup設為0,以便在Web容器啟動時即裝入該Servlet。log4j.properties文件放在根的properties子目錄中,也可以把它放在其它目錄中。應該把.properties文件集中存放,這樣方便管理。
(3).log4j.properties中即可配置log4j.appender.file.File為當前應用的相對路徑.

Log4j入門使用教程 http://www.linuxidc.com/Linux/2013-06/85223.htm

Hibernate配置Log4j顯示SQL參數 http://www.linuxidc.com/Linux/2013-03/81870.htm

Log4j學習筆記(1)_Log4j 基礎&配置項解析 http://www.linuxidc.com/Linux/2013-03/80586.htm

Log4j學習筆記(2)_Log4j配置示例&Spring集成Log4j http://www.linuxidc.com/Linux/2013-03/80587.htm

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-09/106571p2.htm


Copyright © Linux教程網 All Rights Reserved