根據系統屬性、環境變量動態設置log4j2日誌路徑

1、根據環境變量env設置

<- 可以根據System.getenv("LogHomeRoot")獲取的環境變量,可以直接通過以下方式設置 ->
<property name="LOG_HOME">${env:LogHomeRoot}</property>

2、根據系統屬性sys設置

<- 可以根據System.getProperty("LogHomeRoot")獲取的系統屬性,可以直接通過以下方式設置 ->
<property name="LOG_HOME">${sys:LogHomeRoot}</property>

3、通過監聽設置系統屬性實現

1> 編寫監聽類

ServletContextListener:當Servlet容器啓動或終止Web應用時觸發。

public class Log4j2ContextListener implements ServletContextListener{
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		String LogHomeRoot = "/data/logs/test";
		System.setProperty("LogHomeRoot", LogHomeRoot);
	}
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.getProperties().remove("LogHomeRoot");
	}
}

2> web.xml配置監聽

     配在ContextLoaderListener前面。儘可能配在前面,避免其他地方需要處理日誌寫入,但日誌路徑不完整。

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

3> log4j2.xml

<property name="LOG_HOME">${sys:LogHomeRoot}</property>

這樣,tomcat啓動後,spring加載之前設置好系統屬性,加載log4j2時就可以取到動態變量值了。

 

順便記錄一下Eclipse設置Tomcat啓動時參數:

Servers窗口tomcat雙擊打開,點擊 Open launch configuration,打開設置頁面,或者:

Run -> Run Configurations -> 選中Tomcat Server:

Arguments 標籤 VM arguments 用於設置系統屬性,比如:-DLogHomeRoot="/data/logs/test",多個參數之間空格分隔

Environment 標籤 New 用於設置環境變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章