为了让Web项目中的Spring 使用Log4j做如下配置:
1、在web.xml中添加如下内容: <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"。但最好设置,以免项目之间的名称冲突。 定义以后,在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}变量的值。 |
Log4j 配置 的webAppRootKey参数问题
最新推荐文章于 2016-04-29 18:04:09 发布