2011-04-11 52 views
0

亲爱的全部, 我试图从spring初始化log4j配置时遇到问题。类路径:和Spring,日志4j

<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="staticMethod"> 
     <value>org.springframework.util.Log4jConfigurer.initLogging</value> 
    </property> 
    <property name="arguments"> 
         <list> 
      <value>classpath:/resources/META-INF/spring/log4j.xml</value> 
          </list> 
    </property> 
</bean> 

java.io.FileNotFoundException:类路径的资源[/resources/META-INF/spring/log4j.xml]不能被解析到URL,因为它不存在

当我试图把一个断点和观察的功能

公共静态无效initLogging(java.lang.String中的位置)的值位置抛出java.io.FileNotFoundException {/ *编译的代码* /}

然后我看到类路径:令牌没有被替换。

你有什么建议吗?

非常感谢您

+0

这是一个独立的应用程序,或运行在服务器(Tomcat,..)? – Ralph 2011-04-11 08:58:23

回答

1

类路径:/ 资源 /META-INF/spring/log4j.xml

看起来像你使用maven。但是maven会将srcresources文件夹“混合”到一个文件夹中。因此,在一个Maven项目的情况下,路径将是:classpath:


没有斜杠之后classpath:META-INF/spring/log4j.xml如果您的服务器上工作,你应该春天开始前初始化日志框架,因为Spring本身将在开始时使用它来记录信息。

一个办法这样做,是在web.xml中添加此行(比你不需要做这个春天配置)

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/META-INF/log4j.xml</param-value> 
</context-param>  
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

当我尝试把一个断点和观察的功能价值定位

public static void initLogging(java.lang.String location) throws java.io.FileNotFoundException { /* compiled code */ } 

你真的确定吗?神奇的是在行: URL url = ResourceUtils.getURL(resolvedLocation); 所以resolvedLocation是你的字符串“classpath:META-INF ...”,但返回的URL是“翻译”的路径。

请注意,当资源位置以classpath:开头且文件未找到时,getURL函数会抛出异常。所以我会测试如果我指定一个不存在的文件会发生什么。 - >如果没有发生异常,则在classpath:中存在拼写错误。

+0

它是一个服务器内部,它可能与xmlapplicationcontextfactory或类似的东西运行。它真的看起来像“classpath:”令牌不会被替换:( – Edmondo1984 2011-04-11 09:54:41

+0

@ Edmondo1984:请参阅我对服务器的东西的扩展答案 – Ralph 2011-04-11 10:31:22

+0

我不是在经典的J2EE服务器上,我在应用服务器上使用本地弹簧。部署的时间要晚得多,问题不是这样的...你是否建议尝试使用一个文件,我相信它不存在? – Edmondo1984 2011-04-11 16:47:51