log4j和web.xml配置webAppRootKey 的問題(轉)


在tomcat下部署兩個或多個項目時

web.xml文件中最好定義webAppRootKey參數,如果不定義,將會缺省為“webapp.root”,如下:

<!-- 應用路徑  -->  
<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webApp.root</param-value>
  </context-param>

最好每個項目的參數值不同,以免引起項目沖突

 嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\webapps\DRMProject\] instead of [C:\Program Files (x86)\Apache Software Foundation\Tomcat 6.0\webapps\DRMSn\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

 

對多個項目要對webAppRootKey進行配置,這里主要是讓log能將日志寫到對應項目根目錄下,如我配置這兩個項目的webAppRootKey

 <context-param>  
        <param-name>webAppRootKey</param-name>  
        <param-value>webapp.root1</param-value>  
    </context-param>  

2

 <context-param>  
        <param-name>webAppRootKey</param-name>  
        <param-value>webapp.root1</param-value>  
    </context-param>  

這樣就不會出現沖突了。

定義以后,在Web Container啟動時將把ROOT的絕對路徑寫到系統變量里。
然后log4j的配置文件里就可以用${webName.root }來表示Web目錄的絕對路徑,把log文件存放於webapp中。

Log4j 配置 的webAppRootKey參數問題

為了讓Web項目中的Spring 使用Log4j做如下配置:

1、在web.xml中添加如下內容:

<!--如果不定義webAppRootKey參數,那么webAppRootKey就是缺省的"webapp.root"。但最好設置,以免項目之間的名稱沖突。

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

然后log4j的配置文件里就可以用${webName.root }來表示Web目錄的絕對路徑,把log文件存放於webapp中。

此參數用於后面的“Log4jConfigListener”-->

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webName.root</param-value>
</context-param>

<!--由Sprng載入的Log4j配置文件位置-->

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<!--Spring默認刷新Log4j配置文件的間隔,單位為millisecond-->

<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>

<!-- Web 項目 Spring 加載 Log4j 的監聽 -->

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

2、編寫log4j.properties屬性文件,使用web.xml配置的全局變量:

log4j.appender.A_default.File=${webName.root}/WEB-INF/logs/log4j.log

 

詳細內容略。

問題:

如上配置后,log4j.properties屬性文件的存放位置,應在Web項目中的WEB-INF下,而不是默認的/WEB-INF/classes下。

可在做spring 的單元測試時,默認讀取classes下的log4j.properties,不知該問題如何解決?

如果把log4j.properties存放在/WEB-INF/classes/log4j.properties下的話,會在啟動Tomcat時報錯:

log4j:ERROR setFile(null,true) call failed.

java.io.FileNotFoundException:/WEB-INF/logs/log4j.log (系統找不到指定的路徑。)

可在/WEB-INF/logs/log4j.log 卻可以看到log4j.log文件已存在Spring的日志輸出信息。

分析可能是其他的類在加載log4j.properties時,無法讀取${webName.root}變量的值。

http://blog.csdn.net/sghys/archive/2008/12/24/3587744.aspx

可用

<context-param>
       <param-name>log4jConfigLocation</param-name>
       <param-value>classpath:log4j.properties</param-value>
   </context-param>

解決把log4j.properties存放在/WEB-INF/classes/log4j.properties啟動Tomcat時報錯問題

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM