log4j:ERROR setFile(null,true) call failed;log4j.log (系统找不到指定的路径。)

本文介绍如何在Tomcat与Spring框架中配置Log4j,包括在web.xml中设置参数,以及log4j.properties文件的正确放置位置。讨论了在不同环境下配置可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=x-large]Web Server : Tomcat 5.X


Spring : 1.X


为了让Web项目中的Spring 使用Log4j做如下配置:


1、在web.xml中添加如下内容:

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webName.root</param-value>
</context-param>



定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里。

然后log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,把log文件存放于webapp中。




webAppRootKey

webName.root








log4jConfigLocation

/WEB-INF/log4j.properties








log4jRefreshInterval

60000








org.springframework.web.util.Log4jConfigListener




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}变量的值。


回复:


我想你应该是配置了commons-logging.properties,将commons-logging指向了log4j。


回复2:


是log4j.properties与tomcat的log4j重名的原因

你把/WEB-INF/classes/log4j.properties的log4j配置文件改个名字看(如:logConfig.properties)

因为在tomcat启动是默认去找log4j.properties,但此时Listener还没有起来,tomcat就要往\WEB-INF\logs\log4j.log 写日志就找不到了 [/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值