1. 程式人生 > >同一tomcat下部署多個工程log4j衝突的問題

同一tomcat下部署多個工程log4j衝突的問題

本文來自多個播客轉載拼接而成,時間比較長,因此對於出處不能描述詳盡,在此對各位作者致敬並表示歉意。

同一tomcat伺服器下部署多個專案,容易發生衝突,日誌檔案會同時寫入同一個專案的log目錄中,正常情況下在一個tomcat中只會部署一個專案,此情況發生不多,但是一旦發生,需要有解決方案。

1:在web.xml中配置上下文引數

<context-param>  

      <param-name >webAppRootKey</param-name >

     <param-value >webApp.root </param-

value >

</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</

param-value>

</context-param>

定義以後,在Web Container啟動時將把ROOT的絕對路徑寫到系統變數裡。

3 listenercontex-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