同一tomcat下部署多個工程log4j衝突的問題
本文來自多個播客轉載拼接而成,時間比較長,因此對於出處不能描述詳盡,在此對各位作者致敬並表示歉意。
同一tomcat伺服器下部署多個專案,容易發生衝突,日誌檔案會同時寫入同一個專案的log目錄中,正常情況下在一個tomcat中只會部署一個專案,此情況發生不多,但是一旦發生,需要有解決方案。
1:在web.xml中配置上下文引數
<context-param>
<param-name >webAppRootKey</param-name >
<param-value >webApp.root </param-
</context-param >
webAppRootKey引數為配置當前專案絕對路徑,webAppRootKey值由Spring規定,固定寫法。如不配置此引數,將會預設為webApp.root,當有多個web專案共同使用同一個webApp.root值時將會互相沖突(log4g配置檔案中會讀取webApp.root)。
2 確保保每個專案的引數值不同,以免引起專案衝突。
對多個專案要對webAppRootKey進行配置,這裡主要是讓log能將日誌寫到對應專案根目錄下,如配置這兩個專案的webAppRootKey為
<!-- 應用路徑 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root1</param-value>
</context-param>
==================================
<!-- 應用路徑 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root2</
</context-param>
定義以後,在Web Container啟動時將把ROOT的絕對路徑寫到系統變數裡。
3 listener和contex-param
在啟動Web專案時,容器(比如Tomcat)會讀web.xml配置檔案中的兩個節點<listener>和<contex-param>。
接著容器會建立一個ServletContext(上下文),應用範圍內即整個WEB專案都能使用這個上下文。
接著容器會將讀取到<context-param>轉化為鍵值對,並交給ServletContext。
容器建立<listener></listener>中的類例項,即建立監聽。
Spring 通過org.springframework.web.util.WebAppRootListener 這個監聽器來注入專案路徑,因此部署在同一個web容器中的專案,要配置不同的param-value(比如”專案名.root”),不然會造成衝突。但是如果在web.xml中已經配置了org.springframework.web.util.Log4jConfigListener這個監聽器,則不需要配置WebAppRootListener了。因為Log4jConfigListener已經包含了WebAppRootListener的功能。WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否則ApplicationContext的bean注入根目錄值時會發生無法注入異常。
ServletContext讀取到webapprootkey後會取到相應的k-v值如(webapp.root2),之後會以webapp.root2為key,將當前專案的絕對路徑寫入系統變數,因此在容器啟動後,可以呼叫System.getProperty(“webapp.root2”)獲取當前專案路徑。
監聽器中可呼叫getServletContext().getInitParameter("webapp.root2")來獲取引數值。
4 容器啟動log檔案找不到的Exception
解決方式:將Log4jConfigListener配置放在ContextLoaderListener之前,使log4j的元件先於bean載入。
相關推薦
同一tomcat下部署多個工程log4j衝突的問題
本文來自多個播客轉載拼接而成,時間比較長,因此對於出處不能描述詳盡,在此對各位作者致敬並表示歉意。 同一tomcat伺服器下部署多個專案,容易發生衝突,日誌檔案會同時寫入同一個專案的log目錄中,正常情況下在一個tomcat中只會部署一個專案,此情況發生不多,但是一旦發生,
一個tomcat下部署多個項目或一個服務器部署多個tomcat
IT database TE enable 基礎上 位置 ocl apache 現在 最近需要把兩個項目同時部署到服務器上,於是研究了一下,頁借鑒了很多別人的方法,把過程記錄下來,以儆效尤。目錄:1,一個tomcat下同時部署兩個項目(多個項
在同一個tomcat下部署多個springboot專案時,springboot專案無法正常啟動的問題
這個問題是基於,不使用springboot內建的tomcat會產生(即使用自己的tomcat時)。 今天在部署springboot專案的時候遇到了一個問題,怎麼部署都訪問不了,在網上查了很多原因,什麼pom.xml中依賴沒加,或者依賴衝突等等 各種原因都試了 ,結果還是訪問不了,這就
一個tomcat下部署多個專案或一個伺服器部署多個tomcat
最近需要把兩個專案同時部署到伺服器上,於是研究了一下,頁借鑑了很多別人的方法,把過程記錄下來,以儆效尤。 目錄: 1,一個tomcat下同時部署兩個專案(多個專案可以參考) 1.1專案都放在webapps內(共用一個埠) 1)把兩個專案都放在webapps下。 2)處理重複
Linux下部署多個Tomcat端
由於專案需要,共建立了10個Tomcat端,由nginx負責轉發。10個Tomcat埠分別是8080,11000,12000,13000,14000,15000,16000,17000,18000,19000. nginx配置:upstream Tomcat { server xxx.
在同一臺電腦部署多個Tomcat服務
背景:公司的專案使用的是jdk1.6,Tomcat7.0,比較舊,打算建一些測試專案用jdk1.8,Tomcat9.0。 參考了網上幾篇文章 http://dong-shuai22-126-com.iteye.com/blog/1763666 http://www.cnblogs.com/w
在同一臺電腦部署多個Tomcat服務(轉)
參考了網上幾篇文章 http://dong-shuai22-126-com.iteye.com/blog/1763666 http://www.cnblogs.com/whylaughing/p/5896268.html 個別地方做了整理: 1.使用壓縮版的tomc
在Linux的Tomcat下配置多個域名與對應工程相連
1.如何實現修改Linux下Tomcat的埠號。 我們都知道,你的Linux伺服器上的Tomcat安裝配置好後,可以通過ip+:8080埠號訪問,如果想修改埠號,可以通過修改conf目錄下的server.xml檔案來實現。(溫馨提示:以下server.xml配置的修改在修改
web專案Log4j日誌輸出路徑配置問題 問題描述:一個web專案想在一個tomcat下執行多個例項(通過修改war包名稱的實現),然後每個例項都將日誌輸出到tomcat的logs目錄下例項名命名的文
問題描述:一個web專案想在一個tomcat下執行多個例項(通過修改war包名稱的實現),然後每個例項都將日誌輸出到tomcat的logs目錄下例項名命名的資料夾下進行區分檢視每個例項日誌,要求通過儘可能少的改動配置檔案,最好修改例項名後可以不修改log4j的配置檔案。 實現分析:一般實現上面需求,需要在修
同一臺伺服器部署多個tomcat時埠修改
同一臺伺服器部署多tomcat時那些埠需要修改 1.首先了解tomcat的幾個主要埠: 其中8080為HTTP埠,8443為HTTPS埠 <Connector port="8080" pr
同一臺電腦部署多個tomcat伺服器圖解教程
在網上查了很多關於在同一臺電腦部署多個tomcat方法,感覺說得有點深奧,而且都要配置很多地方。 經問同事和自己研究一番,其實在同一臺電腦部署多個tomcat只要改conf資料夾下server.xml檔案的兩個埠就可以。 這個兩個埠分別為:Server元素埠和Connect
一個Tomcat下部署兩個,甚至多個專案
Tomcat目錄下的結構如圖: 第一步:Tomcat預設空間webapps,中已經存在一個專案了,此時要增加一個專案執行可以將原本webapps目錄copa一份, 改名為webapp1(或者其他看實際情況),然後,將webapp1目錄中原來的專案清除,加入你要部署的新專案
如何在同一臺機部署多個tomcat服務
背景:往往不知情的同學在同一臺機器上部署多個tomcat會發現第二個tomcat啟動會報錯。而有些同學會想到可能是埠重複,然而,在server.xml改了埠還是發現不行。其實要想實現同一臺機器部署多個tomcat,需要修改配置的地方不止一個!第一個地方:找到bin/start
Linux下部署多個Tomcat
1.環境:1.1.Centos 5.01.2.apache-tomcat-6.0.182.需要解決一下幾個問題2.1.不同的tomcat啟動和關閉監聽不同的埠2.2.不同的tomcat的啟動檔案startup.sh 中要指定各自的CATALINA_HOME和CATALINA_BASE這兩個環境變數。3.解決步
nginx+docker同一伺服器上部署多個docker實現負載均衡
在提到負載均衡的時候,大多數人都是想著幾臺伺服器甚至幾十臺伺服器組成一個群組 也就是橫向拓展伺服器來實現負載均衡吧 但是還有一種情況是縱向拓展 也就是當你的專案在一臺伺服器上佔用的資源很少,其實是可以在同一臺伺服器上部署多個專案來實現負載均衡的 這裡利用nginx+dock
基於一個tomcat映象部署多個tomcat容器並執行
[tomcat:8]為tomcat映象1,建立2個tomcat容器(外部訪問埠分別為8081/8082)docker run --name mytomcat1 -d -p 8081:8080 tomcat:8docker run --name mytomcat2 -d -p
使用nginx如何讓一個tomcat下的多個應用可以被多個域名繫結
這個是原創。 首先下載一個nginx反代理軟體。我不說他的原理,只說他能做什麼事情。 這個軟體能做哪些事情? 1他能處理負載均衡的問題。 2能處理多個站點或者多個應用session共享問題。 3可以讓你在一臺機器上面的一個tomcat下面的多個應用程式被域名所繫結。(今天討
tomcat中部署多個專案時遇到問題
SEVERE: Error listenerStart 2017-2-27 16:24:48 org.apache.catalina.core.StandardContext start SEVERE: Context [/JYZX2] startup failed due
同一臺伺服器部署多個WEB應用,SESSION衝突的解決方法
由於一臺伺服器上使用Tomcat部署多個WEB專案,而專案因為用到框架都是一樣的,導致同時執行,session相互衝突,這個登入後,那個就得重新登入,造成了使用不方便,解決辦法如下: 在server.xml檔案,host的標籤頁下,加上Context標籤,標籤內容可以這樣寫: <Contex
同一臺機器部署多個ActiveMQ例項
一、在同一臺機器上配置多個ActiveMQ(版本apache-activemq-5.12.1) 1.複製一份配置檔案 cd apache-activemq-5.12.1 cp -r conf conf-new 2.修改配置檔案activemq.xml cd c