zoukankan      html  css  js  c++  java
  • Spring MVC中 log4j日志文件配置相对路径

    log4j和web.xml配置webAppRootKey 的问题

    1 在web.xml配置 

    <context-param>
      <param-name>webAppRootKey</param-name>
      <param-value>web.sample.root</param-value>
    </context-param>

    可以用System.getProperty("web.sample.root")来获取属性值。在Eclipse调试Web项目时,项目的路径是一个临时路径,不在真正的路径下,可以通过上述语句打印出属性值,来看看临时项目路径在哪里

    如:System.out.println("web.root:"+ System.getProperty("web.root"));

        输出:web.root:D:apache-tomcat-6.0.30webappswangzun

    2、Spring通过 org.springframework.web.util.WebAppRootListener 这个监听器来压入项目路径。但是如果在web.xml中已经配置了 org.springframework.web.util.Log4jConfigListener 这个监听器,则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能.

    配置WebAppRootListener:

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


    3、部署在同一容器中的多个Web项目,要配置不同的<param-value>,不能重复webAppRootKey的系统变量名

    4.WebAppRootListener要在ApplicationContext的ContextLoaderListener之前,否则ApplicationContext的bean注入根目录值时会发生无法注入异常。

       <!-- 项目根目录Listener -->
     <listener>
      <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
     </listener>
     <!--Spring的ApplicationContext 载入 -->
     <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>


    4、如果配置了
    log4j.appender.file.File=${web.sample.root}WEB-INF/logs/sample.log  

    log4j会自己自动建立logs目录, 不需要手工显式建立空的logs目录


    在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为
    项目1 的 web.xml:

    <!-- 应用路径 -->
    <context-param> 
    <param-name>webAppRootKey</param-name> 
    <param-value>webapp.root1</param-value> 
    </context-param>

     <!-- 项目根目录Listener -->
     <listener>
      <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
     </listener>

    项目2的 web.xml:
    <!-- 应用路径 -->
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webapp.root2</param-value>
    </context-param>

     <!-- 项目根目录Listener -->
     <listener>
      <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
     </listener>

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

    namemax:

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

     <!-- 项目根目录Listener -->
     <listener>
      <listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
     </listener>

    bean中可以使用:

       <bean id="transformChinese" class="com.zunmi.util.TransformChinese"

             p:outBasePath="${web.root}WEB-INF/destineDomainFile/"
             p:j2fSource="${web.root}WEB-INF/SimpleToTraditional.properties" 
             p:charSet="gbk"
            />

  • 相关阅读:
    Shodan新手入坑指南
    linux 下查看网卡工作速率
    centos关闭ipv6
    springBoot----@ConditionalOnxxx相关注解总结
    ElasticSearch Root身份运行
    CentOS6 Install kafka
    CentOS 7 中firewall-cmd命令
    sensu
    metrics+spring+influxdb
    SpringBoot(十二):SpringBoot整合Kafka
  • 原文地址:https://www.cnblogs.com/vincent4code/p/5321829.html
Copyright © 2011-2022 走看看