为了让Web项目中的Spring 使用Log4j做如下配置:
1、在web.xml中添加如下内容:
<!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"。但最好设置,以免项目之间的名称冲突。如我这里有两个项目都在web.xml都没配置webAppRootKey,那么这两个项目发布到tomcat时就会出现如下的异常:
严重: 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' = [D:\apache-tomcat-6.0.29\webapps\UpLoadAndDownLoad\] instead of [D:\apache-tomcat-6.0.29\webapps\w\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files! at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:146) at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:118) at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2010-10-10 17:18:18 org.apache.catalina.core.StandardContext start 严重: Error listenerStart
所以对多个项目要对webAppRootKey进行配置,这里主要是让log能将日志写到对应项目根目录下,如我配置这两个项目的webAppRootKey为
<!-- 应用路径 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>spring.webapp.root</param-value> </context-param>
<!-- 应用路径 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>spring.webapp.root2</param-value> </context-param>
这样就不会出现冲突了。
定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里。然后log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,把log文件存放于webapp中。
<!--此参数用于后面的“Log4jConfigListener”--> <context-param> <param-name>webAppRootKey</param-name> <param-value>webName.root</param-value> </context-param> <!--由Sprng载入的Log4j配置文件位置--> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond--> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- Web 项目 Spring 加载 Log4j 的监听 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
2、编写log4j.properties属性文件,使用web.xml配置的全局变量:
log4j.appender.A_default.File=${webName.root}/WEB-INF/logs/log4j.log
详细内容略。
问题:
如上配置后,log4j.properties属性文件的存放位置,应在Web项目中的WEB-INF下,而不是默认的/WEB-INF/classes下。
可在做spring 的单元测试时,默认读取classes下的log4j.properties,不知该问题如何解决?
如果把log4j.properties存放在/WEB-INF/classes/log4j.properties下的话,会在启动Tomcat时报错:
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: \WEB-INF\logs\log4j.log (系统找不到指定的路径。)
可在\WEB-INF\logs\log4j.log 却可以看到log4j.log文件已存在Spring的日志输出信息。
分析可能是其他的类在加载log4j.properties时,无法读取${webName.root}变量的值。
相关推荐
2. `<param-name>log4jConfigLocation</param-name>` 指定了Log4j配置文件的路径,这里是`WEB-INF/config/log4j.properties`。这个配置告诉Web应用在哪里寻找Log4j的配置信息。 3. `<param-name>log4...
log4j的灵活配置允许开发者根据实际需求定制日志输出格式、级别以及存储方式,极大地提高了应用程序的日志管理和问题追踪效率。同时,通过引入Spring监听器,实现了动态更新配置文件而无需重启服务器的功能,进一步...
- **说明**:通过注册`Log4jConfigListener`监听器,可以在应用启动时自动加载Log4J配置,并在配置文件发生变化时自动刷新配置。 #### 三、Log4J配置文件详解 Log4J配置文件通常是`.xml`格式,其中包含了日志输出...
在Spring框架中,配置Log4j是一个常见的任务,它允许我们对应用的日志输出进行精细控制,便于调试、监控和问题排查。以下是关于Spring配置Log4j的关键知识点: 1. **webAppRootKey参数**:这个参数用于指定Web应用...
总结起来,配置Java Web项目中的Log4j主要包括三步:在`web.xml`中添加配置参数,创建`log4j.properties`配置文件,以及在Java类中引入和使用Logger。通过这种方式,我们可以有效地管理Web应用程序的日志,提高开发...
通过合理配置Log4j的日志文件存放位置,可以有效地管理日志信息,便于问题定位和系统监控。 需要注意的是,在配置日志文件存放位置的时候,需要考虑到安全性和日志文件的管理策略,避免日志文件过大导致磁盘空间...
-- 应用程序上下文参数 , 指定 log4j日志框架使用的配置参数文件位置 --> <param-name>log4jConfig <!-- log4j配置文件的位置 --> <param-value>/WEB-INF/log4j.properties 3.2 配置log4j.properties文件 ...
接下来是 log4j 配置相关的参数,包括 `log4jConfigLocation`、`webAppRootKey` 和 `log4jRefreshInterval` 等。这些参数用于指定 log4j 配置文件的位置、应用程序的根目录和 log4j 配置刷新间隔等。 之后是多个 `...
2. **配置Log4j配置文件的位置**:接下来,通过`<context-param>`元素设置`log4jConfigLocation`参数,指明Log4j配置文件的位置。例如,`<param-value>classpath:conf/log4j.xml</param-value>`表示配置文件位于类...
`webAppRootKey`参数用于设置应用的根目录键,Log4jConfigListener则会在启动时寻找log4j.properties或log4j.xml配置文件,从而初始化日志系统。 5. **Struts2与Spring整合** 当Struts2和Spring整合时,通常需要...
在web.xml中,我们可以通过`<context-param>`标签来载入Log4j配置。这是因为Spring应用通常需要日志记录功能,而Log4j是常用的日志库之一。为了防止在同一容器中部署多个应用时的日志配置冲突,我们需要通过设置...
`Log4jConfigListener`用于初始化Log4j的日志配置。例如,可以通过以下方式在`web.xml`中配置: ```xml <param-name>webAppRootKey <param-value>your.app.name <listener-class>org.springframework....
- `log4jConfigLocation`: 日志配置文件的位置,例如`/WEB-INF/log4j.properties`,用于设置日志记录行为。 - `webAppRootKey`: 应用的全局唯一标识,例如`/myapp`,用于识别和访问特定的应用程序。 3. Context配置...
- `log4jConfigLocation`:设置日志系统的路径,通常为"/WEB-INF/log4j.properties"。 - `webAppRootKey`:应用程序的唯一名称。 4. **控制配置文件**:每个应用程序的控制配置文件至少包含三种Bean: - **...
5. **log4jConfigLocation**:定义日志配置文件的位置,如`/WEB-INF/log4j.properties`。日志配置文件控制RED5服务器的日志输出行为。 6. **webAppRootKey**:这个参数定义了应用程序的全局唯一名称,例如`/myapp`...
SpringBoot项目是一个基于Java开发的轻量级框架,它整合了Spring的核心功能并简化了配置,使得开发者可以快速构建可运行的应用程序。Spring Boot的主要设计理念是“约定优于配置”,这大大减少了传统Spring应用中的...
要解决这个问题,可以在每个项目的 `web.xml` 文件中添加 `webAppRootKey` 配置项,例如: ```xml <param-name>webAppRootKey <param-value>web1.root <param-name>webAppRootKey <param-value>web2.root ...