2011-04-11 83 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