Log4j 配置 的webAppRootKey参数问题

为了让Web项目中的Spring 使用Log4j做如下配置:

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

<!--如果不定义
webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"。但最好设置,以免项目之间的名称冲突。

如我这里有两个项目都在web.xml都没配置webAppRootKey,那么这两个项目发布到tomcat时就会出现如下的异常:

Xml代码   收藏代码
  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:\apache-tomcat-6.0.29\webapps\UpLoadAndDownLoad\] instead of [D:\apache-tomcat-6.0.29\webapps\w\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!  
  3.     at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:146)  
  4.     at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:118)  
  5.     at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:47)  
  6.     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)  
  7.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)  
  8.     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)  
  9.     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)  
  10.     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)  
  11.     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)  
  12.     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)  
  13.     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)  
  14.     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)  
  15.     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)  
  16.     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)  
  17.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)  
  18.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)  
  19.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  20.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)  
  21.     at org.apache.catalina.core.StandardService.start(StandardService.java:519)  
  22.     at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)  
  23.     at org.apache.catalina.startup.Catalina.start(Catalina.java:581)  
  24.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  25.     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)  
  26.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)  
  27.     at java.lang.reflect.Method.invoke(Unknown Source)  
  28.     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)  
  29.     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)  
  30. 2010-10-10 17:18:18 org.apache.catalina.core.StandardContext start  
  31. 严重: Error listenerStart  

 

所以对多个项目要对webAppRootKey进行配置,这里主要是让log能将日志写到对应项目根目录下,如我配置这两个项目的webAppRootKey

Xml代码   收藏代码
  1. <!-- 应用路径  -->  
  2.     <context-param>  
  3.         <param-name>webAppRootKey</param-name>  
  4.         <param-value>spring.webapp.root</param-value>  
  5.     </context-param>  

 

Xml代码   收藏代码
  1. <!-- 应用路径  -->  
  2.     <context-param>  
  3.         <param-name>webAppRootKey</param-name>  
  4.         <param-value>spring.webapp.root2</param-value>  
  5.     </context-param>  
 

这样就不会出现冲突了。


定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里。
然后
log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,把log文件存放于webapp中。

Xml代码   收藏代码
  1. <!--此参数用于后面的“Log4jConfigListener”-->  
  2. <context-param>  
  3. <param-name>webAppRootKey</param-name>  
  4. <param-value>webName.root</param-value>  
  5. </context-param>  
  6.   
  7. <!--由Sprng载入的Log4j配置文件位置-->  
  8. <context-param>  
  9. <param-name>log4jConfigLocation</param-name>  
  10. <param-value>/WEB-INF/log4j.properties</param-value>  
  11. </context-param>  
  12.   
  13. <!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->  
  14. <context-param>  
  15. <param-name>log4jRefreshInterval</param-name>  
  16. <param-value>60000</param-value>  
  17. </context-param>  
  18.   
  19. <!-- Web 项目 Spring 加载 Log4j 的监听 -->  
  20. <listener>  
  21. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  22. </listener>  
 

2、编写log4j.properties属性文件,使用web.xml配置的全局变量:

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

详细内容略。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值