`
tof.j
  • 浏览: 135480 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类

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. 2.
  7. <context-param>
  8.         <param-name>log4jConfigLocation</param-name>
  9.         <param-value>/WEB-INFclasseslog4j.properties</param-value>
  10. </context-param>




  11. 3.(该条目在petclinic中被注释掉了)
  12. <listener>
  13.    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  14. </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. public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
  2.         String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);
  3.         String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);
  4.         String oldValue = System.getProperty(key);
  5.         if (oldValue != null) {
  6.             throw new IllegalStateException("WARNING: Web app root system property already set: " + key + " = " +
  7.                                                                 

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

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




从代码看出,该方法其实就是把该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变量或者干脆换成别的绝对路径了。 
分享到:
评论

相关推荐

    log4net记录日志

    2. **配置log4net**:通常在应用程序启动时,log4net会读取配置文件(如app.config或web.config)中的设置,定义日志输出的目标、级别、格式等。例如,可以配置将日志写入文件、控制台,或者发送到电子邮件、数据库...

    amcharts插件 提供xml和javascript范例

    标题"amcharts插件 提供xml和javascript范例"指出,这是一个关于amcharts插件的资源包,它包含了使用XML和JavaScript的示例代码。amcharts是一个流行的图表库,用于创建交互式的图表和地图,广泛应用于数据可视化...

    Servlet编程范例(4)

    在`web.xml`中,我们可以使用`&lt;context-param&gt;`元素来定义全局的Context初始化参数,这些参数对Web应用内的所有Servlet都可见。例如: ```xml &lt;web-app&gt; &lt;param-name&gt;driver_type &lt;param-value&gt;oracle.jdbc....

    ZendFramework中文文档

    5.4. Zend_Config_Xml 6. Zend_Console_Getopt 6.1. Getopt 简介 6.2. 声明 Getopt 规则 6.2.1. 用短语法声明选项 6.2.2. 用长语法声明选项 6.3. 读取(Fetching)选项和参数 6.3.1. 操作 Getopt 异常 6.3.2...

    java吐血精华大奉送,你要的都能找到(最新版本)

    技术人员也过个年吧,java_吐血奉献_超值大礼包(最新版本)_含struts,hibernate,spring,log4j,web.xml配置详解,java分页大全,cvs教程,tomcat,swing教程,jboss,及各种框架的配置文件范例

    Java项目设计与开发范例

    13. **日志记录**:通过Log4j或SLF4J等日志框架记录程序运行状态,便于问题排查和性能分析。 14. **持续集成/持续部署(CI/CD)**:使用Jenkins、Git等工具实现自动化构建和部署,加速开发流程。 15. **项目管理**:...

    ajax 经典范例集

    **Ajax(Asynchronous JavaScript and XML)技术是一种在无需刷新整个网页的情况下,能够更新部分网页内容的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验,降低了服务器压力。...

    java吐血精华大奉送,你要的都能找到

    java_吐血奉献_超值大礼包_含struts,hibernate,spring,log4j,web.xml配置详解,java分页大全,cvs教程,tomcat,swing教程,及各种框架的配置文件范例

    C#程序开发范例宝典(第2版).part08

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part12

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    Struts2 与Jquery Ajax的json数据交换的典型范例

    Struts2和jQuery是两种广泛应用于Web开发的技术。Struts2是一个基于MVC(Model-View-Controller)架构的Java框架,它简化了构建企业级Web应用的过程。jQuery则是一个强大的JavaScript库,使得DOM操作、事件处理、...

    springboot-demo.zip

    SpringBoot默认使用Logback或Log4j2进行日志管理,并提供健康检查接口,可以查看应用的运行状态。 9. **Thymeleaf模板引擎** 如果项目涉及视图渲染,可能会使用到Thymeleaf,它是一个HTML模板引擎,与SpringBoot...

    ASP.NET经典范例50讲_1

    8. **错误处理与日志记录**:良好的错误处理和日志记录对于任何应用程序都是至关重要的,例子可能会展示如何设置全局错误处理,以及如何集成日志系统如Log4Net。 9. **持续集成与自动化测试**:这部分可能涉及如何...

    ASP.NET程序开发范例宝典part10

    这部分可能讲解如何创建、路由和测试WebAPI,以及如何处理JSON或XML数据格式。 5. **安全性**:包括身份验证、授权、防止XSS和CSRF攻击等。这部分可能会介绍Forms Authentication、Windows Authentication,以及...

    Java语言编码规范

    - **log4j.properties**:日志框架Log4j的配置文件。 - **hibernate.cfg.xml**:Hibernate持久化框架的配置文件。 - **ApplicationResources.properties**:存储多语言资源的属性文件。 - **struts-config-*.xml**:...

    C#程序开发范例宝典(第2版).part13

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part02

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

Global site tag (gtag.js) - Google Analytics