`
zscomehuyue
  • 浏览: 414698 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

webAppRootKey log4j

阅读更多
转载  web.xml中关于log4j的设置及范例说明 收藏
在web.xml有几个条目和log4j有关,它们是:

   1. 1.
   2. <context-param>
   3.         <param-name>webAppRootKey</param-name>
   4.         <param-value>petclinic.root</param-value><!--改为不同的数值就可以了。-->
   5. </context-param>
   6.


   7. 2.
   8. <context-param>
   9.         <param-name>log4jConfigLocation</param-name>
  10.         <param-value>/WEB-INFclasseslog4j.properties</param-value>
  11. </context-param>
  12.


  13.




  14. 3.(该条目在petclinic中被注释掉了)
  15. <listener>
  16.    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  17. </listener>



我们知道,在web-application中使用log4j,有很多配置方式:
a.
用servlet或者 ServletContextListener对log4j做配置。通常,你不需要亲自编写servlet或者 listener,比如直接利用log4j的com.apache.jakarta.log4j.Log4jInit类,Spring的 org.springframework.web.util.Log4jConfigServlet和 org.springframework.web.util.Se
rvletContextListener,这种方式配置灵活,可以通过参数条目自行指定log4j.properties的位置。

b.
把log4j 的默认配置文件(log4j.properties)放在classpath中,通常是/web-inf/classes目录下.这种方式是log4j的 默认配置方式,无须其他配置。缺点就是无法灵活的通过配置文件来指定log4j.properties的文件位置。在我们的petclinic项目中,因 为listener条目被注释,所以采用的也是这种缺省方式。


现在我们考虑listener条目没有被注释的情况,这种情况和注册Log4jConfigServlet的目的是一样的,只是必须在支持listener的servlet container中使用。

找 到.Log4jConfigServlet和ServletContextListener的源码,他们都在适当的地方 (callback method)调用了Log4jWebConfigurer.initLogging(getServletContext()); 定位到这个方法,第一句就是:WebUtils.setWebAppRootSystemProperty(servletContext);再定位到该 方法,方法很短:




   1.





   2. public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
   3.         String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);
   4.         String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);
   5.         String oldValue = System.getProperty(key);
   6.         if (oldValue != null) {
   7.             throw new IllegalStateException("WARNING: Web app root system property already set: " + key + " = " +
   8.                                                                
   9.

  10.             oldValue + " - Choose unique webAppRootKey values in your web.xml files!");
  11.         }
  12.         String root = servletContext.getRealPath("/");
  13.         if (root == null) {
  14.             throw new IllegalStateException("Cannot set web app root system property when WAR file is not
  15.

  16. expanded");
  17.         }
  18.         System.setProperty(key, root);
  19.         servletContext.log("Set web app root system property: " + key + " = " + root);
  20.     }





从代码看出,该方法其实就是把该web application的根目录的绝对文件路径作为属性保存在 System的属性列表中。该属性的名字,由web.xml文件中的名为"webAppRootKey"的参数值指出。如果不在web.xml中定义 webAppRootKey参数,那么属性名就是缺省的"webapp.root".在我们的petclinic项目中已经定义了 webAppRootKey参数,其值为"petclinic.root",因此,属性的名字就是"petclinic.root".

再 回到Log4jWebConfigurer.initLogging(getServletContext()),接下来的行为是从web.xml中获取 log4jConfigLocation和log4jRefreshInterval.前者指出log4j配置文件(有可能是xml格式)的位置和名字, 后者则指出重新都取配置文件的时间间隔.然后调用Log4jConfigurer.initLogging()方法对log4j做配置。从 Log4jConfigurer.initLogging()方法我们可以看到,针对不同格式的配置文件(properties或者xml), Log4jConfigurer采用不同的lo4j configurator类做配置,例如DOMConfigurator或者 PropertyConfigurator。

至此,关于petclinic中关于log4j的配置,我们已经基本上弄清楚了。可是System对象中的
petclinic.root属性在什么时候使用呢?在web-inf/classes下面的log4j.properties文件中,有这么一句:
log4j.appender.logfile.File=${petclinic.root}/WEB-INF/petclinic.log
这 样,我们就用上了petclinic.root属性了。从上面的分析可知,如果你不在web.xml中定义webAppRootKey参数,那么你就得把 log4j.appender.logfile.File=${petclinic.root}/WEB-INF/petclinic.log
中的petclinic.root变量改为webapp.root变量或者干脆换成别的绝对路径了。
分享到:
评论

相关推荐

    Log4j 相对路径配置

    Log4j 是一个广泛使用的Java日志记录框架,它允许开发者灵活地控制日志信息的输出。在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志...

    log4j的作用及测试

    4. **webAppRootKey**:定义了系统的根目录变量名,其值与`log4j.properties`文件中相应变量一致,以确保路径正确无误。 #### 五、编写测试代码 在`src`目录下创建测试类`test.java`,并引入log4j相关的包: ```...

    Spring对Log4J的增强.txt

    ### Spring对Log4J的增强知识点详解 #### 一、Spring与Log4J集成概述 在Java企业级应用开发中,日志记录是一项至关重要的功能。它不仅有助于开发者调试程序,还能帮助系统管理员进行问题排查及性能分析。Spring...

    spring 配置log4j.docx

    在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...

    详解Log4j 日志文件存放位置设置

    Log4j是Apache的一个开源日志框架,它能够帮助开发者记录应用程序中的运行日志。日志文件的存放位置是日志管理中一个重要的配置项,因为它影响到日志的存储、查看、维护以及磁盘空间的使用。本文将详细介绍如何使用...

    深入浅析java web log4j 配置及在web项目中配置Log4j的技巧

    Log4j是Java平台上广泛使用的日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和分析程序运行状态。在Java Web项目中集成Log4j,可以帮助我们更好地管理和跟踪应用程序中的错误、警告和其他...

    web框架搭建.pdf

    然后,我们需要复制spring-framework-2.5.6-with-dependencies\spring-framework-2.5.6\lib\log4j中的log4j相关的jar文件到项目中WEB-INF/lib目录中。 2.3 向项目中加入Struts2框架 将Struts2解压缩以后,我们需要...

    基于web项目log日志指定输出文件位置配置方法

    2. **配置Log4j配置文件的位置**:接下来,通过`&lt;context-param&gt;`元素设置`log4jConfigLocation`参数,指明Log4j配置文件的位置。例如,`&lt;param-value&gt;classpath:conf/log4j.xml&lt;/param-value&gt;`表示配置文件位于类...

    spring框架底层架构[借鉴].pdf

    接下来是 log4j 配置相关的参数,包括 `log4jConfigLocation`、`webAppRootKey` 和 `log4jRefreshInterval` 等。这些参数用于指定 log4j 配置文件的位置、应用程序的根目录和 log4j 配置刷新间隔等。 之后是多个 `...

    web.xml配置解析.pdf

    `webAppRootKey`参数用于设置应用的根目录键,Log4jConfigListener则会在启动时寻找log4j.properties或log4j.xml配置文件,从而初始化日志系统。 5. **Struts2与Spring整合** 当Struts2和Spring整合时,通常需要...

    tomcat工程迁移至weblogic文档

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender ``` 综上所述,从Tomcat迁移到WebLogic的过程中,涉及到的不仅仅是简单的文件复制,还需要细致地调整配置文件,并充分考虑到两个平台之间的差异性。通过...

    Spring配置总结

    在web.xml中,我们可以通过`&lt;context-param&gt;`标签来载入Log4j配置。这是因为Spring应用通常需要日志记录功能,而Log4j是常用的日志库之一。为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置...

    web.xml配置解析[总结].pdf

    `Log4jConfigListener`用于初始化Log4j的日志配置。例如,可以通过以下方式在`web.xml`中配置: ```xml &lt;param-name&gt;webAppRootKey &lt;param-value&gt;your.app.name &lt;listener-class&gt;org.springframework....

    spring、struts、ibatis框架搭建流程

    - **context-param**:配置应用程序上下文参数,包括`webAppRootKey`和`log4jConfigLocation`,后者用于指定log4j配置文件的位置。 - **context-param**:配置Spring配置文件的位置,如`/WEB-INF/spring/...

    Spring 注解学习手札

    `&lt;context-param&gt;`用于设置全局参数,例如`webAppRootKey`用于定义应用的根目录,`log4jConfigLocation`和`log4jRefreshInterval`分别指定Log4J配置文件的位置和刷新间隔,而`contextConfigLocation`则指定了Spring...

    用Maven和Jetty开发调试WEB应用程序

    - resources目录通常包含项目的配置文件,例如Struts、Spring或Log4j的配置文件。这些文件必须被编译到target目录下,以便Jetty能够在运行时读取它们。 #### 配置Web.xml 在`web.xml`中配置Spring和Log4j的bean...

    Spring+Hibernate笔记

    它定义了初始化参数,如web应用程序的根目录(webAppRootKey)和log4j配置文件的位置(log4jConfigLocation),以及监听器来初始化日志系统。 1.2. 配置Eclipse环境对于提高开发效率至关重要。这包括创建Java工程,...

Global site tag (gtag.js) - Google Analytics