• 在tomcat下部署两个或多个项目时 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 FoundationTomcat 6.0webappsDRMProject] instead of [C:Program Files (x86)Apache Software FoundationTomcat 6.0webappsDRMSn] - 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时报错问题

  • 相关阅读:
    最大子数组1
    大道至简阅读笔记03
    I-think-3
    第3周学习进度
    大道至简阅读笔记02
    四则运算题3
    大道至简阅读笔记01
    第2周学习进度
    构建之法阅读笔记03
    按Right-BICEP的测试用例
  • 原文地址:https://www.cnblogs.com/lijingran/p/7745199.html
Copyright © 2020-2023  润新知