`
thtwin
  • 浏览: 165842 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

阅读更多
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 写日志就找不到了
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics