[转] Log4j 配置 的webAppRootKey参数问题
在tomcat下部署两个或多个项目时,web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为“webapp.root”,如下:
<!-- 应用路径 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
最好保持每个项目的参数值不同,以免引起项目冲突
1 在web.xml配置
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webName.root</param-value>
</context-param>
可以用System.getProperty("webName.root")来获取属性值。在Eclipse调试Web项目时,项目的路径是一个临时路径,不在真正的路径下,可以通过上述语句打印出属性值,来看看临时项目路径在哪里
2、Spring通过 org.springframework.web.util.WebAppRootListener
这个监听器来压入项目路径。但是如果在web.xml中已经配置了
org.springframework.web.util.Log4jConfigListener
这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能
3、部署在同一容器中的Web项目,要配置不同的<param-value>,不能重复
4、如果配置了
log4j.appender.file.File=${webName.root}/WEB-INF/logs/sample.log
log4j会自己自动建立logs目录, 不需要手工显式建立空的logs目录
常见错误:多个工程目录下的web.xml文件的<param-value>webName.root</param-
value>相同,就算在tomcat的conf下配置不同的名,例如配置atcs2.xml指向另外一个工程目录,但是恰巧那个工程下的
web.xml里面也配置相同的webAppRootKey,那么将会出现其中一个工程不能够访问的问题。
网页出现经典的The requested resource (/webName/) is not available错误!
问题发现方法:在myEclipse下配置log4j,之后会将一些不会报出来的错误亦会报出来,根据信息就可以发现是相同的webAppRootKey覆盖问题。在此我的log4j的报错信息:
Web app root system property already set to different value: 'atcs.root'
= [D:\workspace2\Huadu_Atcs3\WebContent\] instead of
[D:\WorkSpace\Huadu_Atcs3\WebContent\] - Choose unique values for the
'webAppRootKey' context-param in your web.xml files!