Classpath:和Spring,log4j

时间:2011-04-11 08:55:56

标签: spring log4j classpath

亲爱的, 尝试从spring初始化我的log4j配置时遇到问题。

<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,因为它不存在

当我尝试设置断点并观察值函数的位置

  

public static void initLogging(java.lang.String location)抛出java.io.FileNotFoundException {/ *编译代码* /}

然后我看到classpath:token没有被替换。

你有什么建议吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

  

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

看起来你正在使用maven。但maven会将srcresources文件夹“混合”为一个。因此,对于Maven项目,路径为:classpath:META-INF/spring/log4j.xml

classpath:

之后没有斜线

如果你在服务器上工作,你应该在Spring启动之前初始化日志框架,因为Spring本身会在启动时使用它来记录信息。

这样做的一种方法是在web.xml中添加这些行(而不是在spring配置中不需要这样做)

<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是“已翻译”的路径。

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