在web.xml有几个条目和log4j有关,它们是:
1.
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>petclinic.root</param-value>
</context-param>
2.
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INFclasseslog4j.properties</param-value>
</context-param>
3.(该条目在petclinic中被注释掉了)
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</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);再定位到该方法,方法很短:
public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException {
String param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);
String key = (param != null ? param : DEFAULT_WEB_APP_ROOT_KEY);
String oldValue = System.getProperty(key);
if (oldValue != null) {
throw new IllegalStateException("WARNING: Web app root system property already set: " + key + " = " +
oldValue + " - Choose unique webAppRootKey values in your web.xml files!");
}
String root = servletContext.getRealPath("/");
if (root == null) {
throw new IllegalStateException("Cannot set web app root system property when WAR file is not
expanded");
}
System.setProperty(key, root);
servletContext.log("Set web app root system property: " + key + " = " + root);
}
从代码看出,该方法其实就是把该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变量或者干脆换成别的绝对路径了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hwctl/archive/2007/07/31/1719597.aspx
分享到:
相关推荐
赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...
赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-webapp-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-webapp-...
comet 很好的一个实例 var ajax = new Ajax.Request(WebApp._url_, { method: 'get', parameters: { 'timestamp' : WebApp._timestamp_ }, onSuccess: function(transport) { var response = ...
看懂App加载Class的顺序和Method的顺序.zip,用于在使用应用程序时打印其结构
WebApp.cspro
12 14:33:37.672:WARN::Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in URL [file:/E:/cloudwave-core/src/main/webapp/WEB- ...
基于easyUI为环境的前端简单环境搭建包(easyUI+jQuery+jsp)
001_WebApp.pdf 章节概述 • 网站部署规划 部署网站 配置网站 监视网站 流量管理器 创建和配置网站 演示 1 :中国版 Windows Azure 创建新网站 使用 FTP 部署网站 使用 Web 部署来部署网站 演示 2 :...
用python搭建自己的一个小的服务器,并运行自己的web应用。
angular1.x 移动端开发webapp.zip
很棒的python3-webapp 小白的Python入门教程实战篇:网站+ iOS App原始码 每日实战参考源码:
, [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http://www.yahoo.com], [org.apache.webapp.balancer.rules....
皮卡网 :high_voltage: PikaBot of Discord的官方测试网站
基于Html5的webapp.pdf
从0到1实战移动WebApp.txt
python库。资源全名:docassemble.webapp-0.5.34.tar.gz
skywalking 8.7 安装包,包括agent,skywalking-webapp.jar
因为我们主要从事WEB开发,所以我们只在PDA开发一个主的Android程序,单用WebView就可以了,而其他开发就直接做WEB开发。在开发过程中,遇到了很多问题,为了帮助同病相怜的XX,将初始程序上传,希望对相关人员有所...
资源来自pypi官网。 资源全名:docassemble.webapp-0.5.21.tar.gz