log4j 的日誌存放目錄設置

法1、 解決的辦法天然是用相對路徑代替絕對路徑,其實log4j的FileAppender自己就有這樣的機制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log
其中「${WORKDIR}/」是個變量,會被System Property中的「WORKDIR」的值代替。這樣,咱們就能夠在log4j加載配置文件以前,先用System.setProperty ("WORKDIR", WORKDIR);設置好根路徑,此操做可經過一初始的servlet進行。
法2、可使用服務器環境變量
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參數中
法3、經過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文件集中存放,這樣方便管理。
本文來源於IT民工 http://www.whitehouse.net.cn/blog/ , 原文地址:http://www.whitehouse.net.cn/blog/Article/log4j_config.html html

相關文章
相關標籤/搜索