1. 程式人生 > >log4j.xml配置檔案中引入變數

log4j.xml配置檔案中引入變數

Boss最初建議,修改Tomcat的啟動指令碼,在裡面增加變數配置,比如“-Dlog4jOutputPath=c:/log4j”。

    我一聽,就不太贊成這種做法了。對於開發與運維都是一撥人,經常需要和其它開發人員交流的情況,修改Tomcat自身的配置比較麻煩。
為什麼這麼說呢?

   Tomcat是系統級的程式,而我們的程式碼是應用級的程式。開發者,對自己的應用程式,一般是掌控度非常高的,但是對於Tomcat等不是自己寫的系統程式,把控度比較低。Tomcat的隨便一行啟動程式碼,不小心改錯了,就啟動不了了。
   修改Tomcat還有壞處,本地開發、線上部署、交接給其它客戶,還得讓客戶去修改Tomcat這個和咱們的程式無關的配置,是不科學的。


   我的建議是,把這些配置,放在外圍,寫入個檔案,比如startupTomcat.sh,在啟動的時候指定引數。每個人都可以很靈活地修改log4j等配置引數。
   初步商議,我們採用這種做法。

   總結下:
<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">    
		<param name="File" value="${log4jOutputPath}/front/default.log" /><!-- 設定日誌輸出檔名 -->  
</appender>


啟動的時候,增加VM引數,-Dlog4jOutputPath=c:/log4j----------------------------------------------------------------------------------------------------------
第2種做法,適合開發和運維都是同一人的情況,把log4j的變數,放在Web.xml裡,部署的時候,需要手動修改這個變數。

log4j配置

可在web.xml中配置log4j.xml的位置,引數名稱為:log4jXmlPath。

也可以,配置log4j的日誌輸出位置的目錄,引數名稱為:log4jOutputPath。

<servlet>
     <servlet-name>Log4jInit</servlet-name>
     <servlet-class>cn.fansunion.common.web.Log4jInit</servlet-class> 
     <init-param> <param-name>log4jXmlPath</param-name> <param-value>C:/log4j.xml</param-value> </init-param> 
      <init-param> <param-name>log4jOutputPath</param-name> <param-value>C:/log4j/xiaolei2</param-value> </init-param> 
    <load-on-startup>0</load-on-startup> 
</servlet> 



    注意:這2個引數都必須輸入絕對地址,如果log4jXmlPath沒有值,或者對應的檔案不存在,將把classpath下的log4j.xml作為預設配置檔案。如果再找不到,將報錯,log4j配置失敗。

如果log4jOutputPath沒有值,或者對應的檔案不存在,將把classpath下的log4j資料夾作為預設的輸出目錄。

Author:
[email protected] 2015年1月8日

Java程式碼 Log4jInit.java

public class Log4jInit extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void init(ServletConfig config) throws ServletException {

		// 從web.xml中找到log4j的輸出目錄
		String log4jOutputPath = config.getInitParameter("log4jOutputPath");
		// 預設的日誌輸出位置
		if (StringUtils.isBlank(log4jOutputPath)) {
			log4jOutputPath = Log4jInit.class.getClassLoader().getResource("")
					.getFile()
					+ "/log4j";
		}
		File log4jOutputPathFile = new File(log4jOutputPath);
		// 如果輸出檔案不存在,手動建立
		boolean log4xmlFileExists = log4jOutputPathFile.exists();
		if (!log4xmlFileExists) {
			System.out.println(log4jOutputPathFile.mkdirs());
		}
		// log4j.xml檔案中的變數是在這裡設定的
		System.setProperty("log4jOutputPath", log4jOutputPath);

		// 從web.xml中找到log4j.xml的輸出目錄
		String log4jXmlPath = config.getInitParameter("log4jXmlPath");
		boolean exist = false;
		// 如果在web.xml手動配置,log4jXmlPath應該使用絕對地址,否則,就使用預設的位置和檔名就行
		if (StringUtils.isNotBlank(log4jXmlPath)) {
			File file = new File(log4jXmlPath);
			exist = file.exists();
		}
		// log4jXmlPath預設位於classpath下log4j.xml
		if (!exist) {
			URL resource = Log4jInit.class.getClassLoader().getResource(
					"log4j.xml");
			if (resource != null) {
				log4jXmlPath = resource.getFile();
			}
		}
		DOMConfigurator.configure(log4jXmlPath);
	}
}

----------------------------------------------------------------------------------------------------------

相關推薦

log4j.xml配置檔案引入變數

Boss最初建議,修改Tomcat的啟動指令碼,在裡面增加變數配置,比如“-Dlog4jOutputPath=c:/log4j”。    我一聽,就不太贊成這種做法了。對於開發與運維都是一撥人,經常需要和其它開發人員交流的情況,修改Tomcat自身的配置比較麻煩。為什麼這麼

XML配置檔案使用properties檔案的鍵值作為變數化引數

背景XML檔案中的引數如果寫成固定值,每當有更新的時候需要一個一個的去修改,很麻煩。利用resources下的property檔案可以很方便的在部署執行階段改變一些特定配置屬性,比如資料庫連線等。然後在程式中根據鍵名使用property檔案中的特定屬性。在Spring中也可以

spring xml配置檔案標籤的含義

例如在spring-config.xml檔案頭看到如下的配置: <beans xmlns="http://www.springframework.org/schema/beans"          xmlns:xsi="http://www.w3.o

log4j.properties,log4j.xml配置檔案配置示例

log4j.properties日誌檔案的配置一般放在src源目錄下就可以了,下面是具體的配置示例: ### direct log messages to stdout ### log4j.appe

springboot 讀取配置檔案變數(通過註解方式)

springboot的application.properties檔案中可以定義一些可配置的常量。在程式中我們不需要再重新的讀取檔案,我們可以直接使用@Value註解讀取配置檔案中的值。首先看一下配置檔案application.properties中的內容是:spring.p

如何獲取web專案hibernate.cfg.xml配置檔案的資料

有時候想要獲取hibernate.cfg.xml配置檔案中的資料,網路上有很多方法,有的很複雜,這裡我介紹一種很簡單的獲取方法。 hibernate.cfg.xml配置檔案中有連線資料庫所需的各種資訊,比如這裡要獲取connection.url欄位對應的url資料,如下所示

springboot 配置檔案屬性變數引用方式@@解析

這種屬性應用方式是[email protected][email protected]。 兩個@符號是springboot為替代${}屬性佔位符產生,原因是${}會被maven處理,所以應該是起不到引用變數的作用。 @@方式可以引用springboot非

web.xml配置檔案的servlet和servlet-mapping

寫了好多小專案後也沒弄明白<url-pattern>的真正意義,寫跳轉的時候也是跳的三心二意的,今天查了一下web.xml的詳細配置,看了看servlet-mapping的講解,豁然開朗,做了做小實驗,原來是這樣,捂臉。下面把看到的文章的servlet片段摘抄過

mybatis的xml配置檔案使用select語句資料不全

我的資料表裡項很多,但是用mybaits中的xml配置檔案select語句卻只返回了幾句話,之前我的程式碼是這樣的: <select id="selectAll" resultType="entity.Transaction"> selec

Spring學習筆記 在XML配置檔案使用properties檔案的鍵值

property檔案可以很方便的在部署執行階段改變一些特定配置屬性,比如資料庫連線等。然後在程式中根據鍵名使用property檔案中的特定屬性。在Spring中也可以在XML配置檔案中的Bean定義時通過property檔案動態進行屬性值的定義。 使用方法描述 假如入

MyBatis兩種執行XXXMapper.xml配置檔案SQL語句的方法

一、SqlSession單例模式類 package cn.mybatis.Sql; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.i

web.xml配置檔案ContextLoaderListener的作用

在搭建ssm框架的時候,在web.xml配置檔案中配置監聽器listener,它的作用是在啟動web容器時,自動裝配Spring的applicationContext.xml的配置資訊。ContextLoaderListener繼承ContextLoader類,

SpringapplicationContext.xml配置檔案資料庫資料來源配置

<!-- 標頭檔案,主要注意一下編碼 --> <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework

struts.xml配置檔案各個標籤的含義,已經知識點記錄

struts.xml中使用<constant name="" value=""></constant>元素進行覆蓋<constant name="struts.devMode" value="true"></constant>這

android manifest.xml配置檔案的 Service節點

The name of the process where the service is to run. Normally,all components of an application run in the default process created for theapplication. It ha

pom.xml配置檔案所有標籤及作用簡單描述

我轉載的是關於pom.xml檔案中會使用到的基本上所有的標籤以及標籤的作用簡單描述。 可能我們自己的專案所使用到的標籤總數量不及此文的一半。 我轉載僅為方便你我他學習之用,眾噴子們,還請指下留情,輕噴。 因為此文只是簡單的介紹下所有的標籤,以及標籤的作用。具體我也沒有全部用

eclipse編輯log4jxml配置檔案時,自動提示

方法1. 配置log4j.dtd檔案:   Windows -> Preferences -> XML -> XML Catalog         點選 Add..  新增一個XML Catalog Entry        在彈出的視窗如下配置:  

讓Eclipsespring的xml配置檔案出現屬性和類提示

在spring配置檔案中可以讓配置bean的時候出現提示,這裡需要做一些設定。設定包括安裝springide外掛,spring-beans-version.xsd檔案引入,增加xml編輯提示的字元,預設只有=>:。最後是讓配置檔案可以通過Spring Config Editor的方式開

轉:ssm spring+springmvc+mybatisxml配置檔案詳解

這幾天一直在整合SSM框架,雖然網上有很多已經整合好的,但是對於裡面的配置檔案並沒有進行過多的說明,很多人知其然不知其所以然,經過幾天的搜尋和整理,今天總算對其中的XML配置檔案有了一定的瞭解,所以拿出來一起分享一下,希望有不足的地方大家批評指正~~~ 首先   這篇文章暫時只對框架中所要用到的配

JAVA spring 把全域性變數寫到配置檔案

把一些全域性的引數配置到配置檔案裡面,把全域性屬性注入到類裡面,由程式程式碼直接引用. 普通引入properties方法(只介紹) 在spring的配置檔案applicationContext.xml配置 <bean id= "propertyConfigure