转载 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 是一个广泛使用的Java日志记录框架,它允许开发者灵活地控制日志信息的输出。在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志...
4. **webAppRootKey**:定义了系统的根目录变量名,其值与`log4j.properties`文件中相应变量一致,以确保路径正确无误。 #### 五、编写测试代码 在`src`目录下创建测试类`test.java`,并引入log4j相关的包: ```...
### Spring对Log4J的增强知识点详解 #### 一、Spring与Log4J集成概述 在Java企业级应用开发中,日志记录是一项至关重要的功能。它不仅有助于开发者调试程序,还能帮助系统管理员进行问题排查及性能分析。Spring...
在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...
Log4j是Apache的一个开源日志框架,它能够帮助开发者记录应用程序中的运行日志。日志文件的存放位置是日志管理中一个重要的配置项,因为它影响到日志的存储、查看、维护以及磁盘空间的使用。本文将详细介绍如何使用...
Log4j是Java平台上广泛使用的日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和分析程序运行状态。在Java Web项目中集成Log4j,可以帮助我们更好地管理和跟踪应用程序中的错误、警告和其他...
然后,我们需要复制spring-framework-2.5.6-with-dependencies\spring-framework-2.5.6\lib\log4j中的log4j相关的jar文件到项目中WEB-INF/lib目录中。 2.3 向项目中加入Struts2框架 将Struts2解压缩以后,我们需要...
2. **配置Log4j配置文件的位置**:接下来,通过`<context-param>`元素设置`log4jConfigLocation`参数,指明Log4j配置文件的位置。例如,`<param-value>classpath:conf/log4j.xml</param-value>`表示配置文件位于类...
接下来是 log4j 配置相关的参数,包括 `log4jConfigLocation`、`webAppRootKey` 和 `log4jRefreshInterval` 等。这些参数用于指定 log4j 配置文件的位置、应用程序的根目录和 log4j 配置刷新间隔等。 之后是多个 `...
`webAppRootKey`参数用于设置应用的根目录键,Log4jConfigListener则会在启动时寻找log4j.properties或log4j.xml配置文件,从而初始化日志系统。 5. **Struts2与Spring整合** 当Struts2和Spring整合时,通常需要...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender ``` 综上所述,从Tomcat迁移到WebLogic的过程中,涉及到的不仅仅是简单的文件复制,还需要细致地调整配置文件,并充分考虑到两个平台之间的差异性。通过...
在web.xml中,我们可以通过`<context-param>`标签来载入Log4j配置。这是因为Spring应用通常需要日志记录功能,而Log4j是常用的日志库之一。为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置...
`Log4jConfigListener`用于初始化Log4j的日志配置。例如,可以通过以下方式在`web.xml`中配置: ```xml <param-name>webAppRootKey <param-value>your.app.name <listener-class>org.springframework....
- **context-param**:配置应用程序上下文参数,包括`webAppRootKey`和`log4jConfigLocation`,后者用于指定log4j配置文件的位置。 - **context-param**:配置Spring配置文件的位置,如`/WEB-INF/spring/...
`<context-param>`用于设置全局参数,例如`webAppRootKey`用于定义应用的根目录,`log4jConfigLocation`和`log4jRefreshInterval`分别指定Log4J配置文件的位置和刷新间隔,而`contextConfigLocation`则指定了Spring...
- resources目录通常包含项目的配置文件,例如Struts、Spring或Log4j的配置文件。这些文件必须被编译到target目录下,以便Jetty能够在运行时读取它们。 #### 配置Web.xml 在`web.xml`中配置Spring和Log4j的bean...
它定义了初始化参数,如web应用程序的根目录(webAppRootKey)和log4j配置文件的位置(log4jConfigLocation),以及监听器来初始化日志系统。 1.2. 配置Eclipse环境对于提高开发效率至关重要。这包括创建Java工程,...