2010-01-31 60 views
6

我試圖使用Log4j作爲Spring框架的一部分, 據我所知,通過使用適當的豆 該系統應該映射一個單身實例可訪問在代碼 同時自動映射測井深度對類正確使用LOG4J在Spring框架通過DI

到正常使用Log4j類似的如在

Logger log = Logger.getLogger(getClass());

我已經使用下面的Spring bean定義

<bean id="log4jInitialization" 
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" 
     value="org.springframework.util.Log4jConfigurer" /> 
    <property name="targetMethod" value="initLogging" /> 
    <property name="arguments"> 
     <list> 
      <value>conf\log4j.xml</value> 
     </list> 
    </property> 
</bean> 

,但我不能這個bean到一個特定的元件在給定 類映射我也不是能夠通過@Autowired

使用它

請讓我知道,如果有任何更好的方法來整合Log4j和春天

問候

馬克

回答

6

簡短的回答你的問題是,log4j的不DI友好。

Log4jConfigurer.initLogging()方法有一個void返回值,所以沒有什麼可注入的。這個想法是,你調用引導log4j的方法,然後像往常一樣使用Log4j API(使用Logger.getLogger(getClass()))。

儘管如此,您通常不會將Log4jConfigurer配置爲Spring bean,但更常見的情況是您可以在應用程序啓動過程中直接從您自己的代碼中調用它。

如果這是一個web應用程序,那麼Spring提供了更適合該環境的Log4jConfigurer的替代方案(Log4jWebConfigurerLog4jConfigListener)。順便說一句,2年前,我提交了一個feature request以允許伐木工人自動裝配,並且最終被標記爲修復Spring 3.1。 Horray。

+0

謝謝。希望你的建議在不久的將來得到實施。順便說一句,我看到log5j發現一個系統自動執行「Logger.getLogger(getClass())」希望Spring社區找到一個類似但更好的方法 - Log5j做了一些危險的事情來實現這一點 – Mark 2010-02-01 09:38:59