java.lang.IllegalStateException:Web app root system property already set to different value 錯誤原因及解決 Log4j


Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制台、文件、GUI組件、甚至是套接口 服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就 是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。

 

其實呢,我覺得他就是一個能對我們的WEB應用監控的組件,讓我們可以了解到我們的程序運行的情況 ,以及出錯后的相關記錄。

 

 我在用的時候報了一個錯誤

Java代碼   收藏代碼
  1. 嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener  
  2. java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [D:\MyEclipseProject\.metadata\.me_tcat\webapps\ReservationSystem\] instead of [D:\MyEclipseProject\.metadata\.me_tcat\webapps\SpringMVCDemo\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!  

 

我們來看一下Log4j的配置:

Java代碼   收藏代碼
  1. log4j.rootLogger=INFO, stdout, logfile  
  2.   
  3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  4. log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout  
  5. #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
  6. log4j.appender.stdout.layout.ConversionPattern=- %m%n  
  7.   
  8. log4j.appender.logfile=org.apache.log4j.RollingFileAppender   
  9. log4j.appender.logfile.File=${webapp.root}/webapp.html  
  10. log4j.appender.logfile.MaxFileSize=512KB  
  11.   
  12.   
  13. # Keep three backup files.  
  14. log4j.appender.logfile.MaxBackupIndex=3  
  15. # Pattern to output: date priority [category] - message  
  16. log4j.appender.logfile.layout=org.apache.log4j.HTMLLayout  
  17. log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n  
  18.   
  19. log4j.logger.com.opensymphony.xwork2=ERROR   
  20.   
  21. # Control logging for other open source packages  
  22. log4j.logger.org.springframework=ERROR  
  23. log4j.logger.org.quartz=ERROR  
  24. log4j.logger.net.sf.ehcache=ERROR  
  25. log4j.logger.net.sf.navigator=ERROR  
  26. log4j.logger.org.apache.commons=ERROR  
  27. log4j.logger.org.apache.struts=ERROR  
  28. log4j.logger.org.hibernate=DEBUG   
  29. # Struts OgnlUtil issues unimportant warnings   
  30. log4j.logger.com.opensymphony.xwork2.util.OgnlUtil=error   
  31. log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack=error  

 發現沒有什么問題啊,但是,請注意${webapp.root}這個變量 ,對照着錯誤提示大概看了一下,意思是說Web應用程序根系統屬性已經被設置,說白了就是說'webapp.root' 這個配置名稱已經被使用了,不能再用這個了,

並且也提示了Choose unique values for the 'webAppRootKey' context-param in your web.xml files ,也就是說我們可以在web.xml里配置一個唯一的'webAppRootKey' ,這樣就不會沖突了。

 

這個問題會出現在一個WEB服務器同時部署多個使用了Log4j的應用上,如果配置不當,出這個錯誤還真會讓你郁悶到抓狂。我就是出這個問題了,一個Tomcat部署了2個使用了Log4j的項目。

 

然后我這樣解決:按給的提示在web.xml里加上

Java代碼   收藏代碼
  1. <context-param>  
  2.     <param-name>webAppRootKey</param-name>  
  3.     <param-value>myapp.root</param-value>  
  4. </context-param>  

 然后在 log4j.properties里就寫成${myapp.root},只要這個名稱不重復,就不會產生Web app root system property already set to different value的錯誤了。雖然正式使用時一台服務器部署多個應用程序的情況會比較少,但是還是保險起見吧,也對我們的程序相關的命名標准化吧,把

 ${webapp.root}改成${[應用程序].root},這是個好習慣。


免責聲明!

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



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