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

Log4j中配置日志文件相對路徑[續集]

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

這篇文章是基於流傳在網上較為完整的關於“log4j中配置日志文件相對路徑”問題的解決方法。該篇博文幾經轉載,流傳至今。這是此文的轉載[ http://www.linuxidc.com/Linux/2014-09/106571.htm ],為了能夠清楚本文所要解決的問題,建議閱讀此文。

該文中最後提到關於log4j配置文件初始化時產生的一些異常和警告信息。在這個疑問下和我在實際生產情況下的一些理解,認為log4j的配置日志文件相對路徑化是必須的,采用系統環境變量將依賴於系統不利於移植,使用絕對路徑顯然更不可取,故繼續探討log4j的配置文件相對路徑問題。

在初始化Web應用中的所有Filter和Servlet之前通知ServletContextListener關於上下文初始化信息。那麼可以嘗試在contextInitialized()方法中來完成log4j配置中文件的路徑設置和配置文件初始化。

1.創建的Log4jListenter:

public class Log4jListener implements ServletContextListener {

@Override

public void contextInitialized(ServletContextEvent arg0) {

ServletContext context = arg0.getServletContext();

String prefix = context.getRealPath("/");

String file = context.getInitParameter("log4j");

String filePath = prefix + file;

Properties props = new Properties();

try {

FileInputStream istream = new FileInputStream(filePath);

props.load(istream);

istream.close();

String logFile = prefix

+ props.getProperty("log4j.appender.FILE.File");

// 設置路徑

props.setProperty("log4j.appender.FILE.File", logFile);

// 裝入log4j配置信息

PropertyConfigurator.configure(props);

} catch (IOException e) {

System.out.println("Could not read configuration file [" + filePath

+ "].");

System.out.println("Ignoring configuration file [" + filePath

+ "].");

}

}

@Override

public void contextDestroyed(ServletContextEvent arg0) {

}

}

通過獲取項目路徑,log4j配置文件相對與項目路徑二者組合獲取到配置文件的絕對路徑;讀取配置信息;然後重置“log4j.appender.File.File”的值,該值即為日志輸入的路徑,這樣就靈活多了。

這裡的“log4j.appender.File.File”具體寫法更加log4j.properties的實際配置內容而定。如下是使用的日志配置文件內容:

#日志

log4j.rootLogger=INFO, FILE

#FILE

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

log4j.appender.FILE.Threshold=INFO

log4j.appender.FILE.ImmediateFlush=true

log4j.appender.FILE.File=brs.log

log4j.appender.FILE.DatePattern='.'yyyy-MM-dd

log4j.appender.FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n

根據1中的代碼可得出輸出的日志文件路徑是:工程目錄/brs.log

2.在web.xml進行配置

<context-param>

<param-name>log4j</param-name>

<param-value>WEB-INF/classes/log4j.properties</param-value>

</context-param>

<listener>

<listener-class>com.test.Log4jListener</listener-class>

</listener>

上面配置了log4j配置文件相對應項目路徑的路徑和ServletContextListener實現類。當然這裡的context-param是否需要設置可以根據Log4jListener類中據說使用情況而定。

3.啟動web應用將不存在“log4j中配置日志文件相對路徑”這篇文章最後提到的問題。

寫到這裡不由感歎一下,Spring的作者已經想到了,而且如果在Web應用中用到Spring的話則更加簡便。日志配置文件中關於日志文件輸出路徑這樣配置即可:

log4j.properties文件:

log4j.appender.FILE.File=${webapp.root}/WEB-INF/logs/brs.lo

web.xml文件:

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener

是的沒錯!Spring就是這樣來監聽日志配置的!

不過上面用到的“webapp.root”這個變量則是Web應用的根目錄了。至於“webapp.root”的來龍去脈可以查看源代碼:org.springframework.web.util.WebUtils類。

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

Copyright © Linux教程網 All Rights Reserved