2011-06-14 50 views
3

在我們的webapp中,我們使用java.util.Logging(實際上,自從我們部署到Tomcat 6以來,JULI)。日誌記錄由WEB-INF/classes中的logging.properties文件配置,一個la this在Spring中,如何配置java.util.Logging以使其可以自動裝配?

我想配置記錄器,因此它可以被裝配,是這樣的:

@Autowired 
private Logger mylogger; 

我搜索了Spring論壇,網頁,當然堆棧溢出的,我無法找到如何設置。我會很感激這方面的幫助。

謝謝!

回答

3

的一種方法是使用Java Config style,所以你有這樣一個豆:

@Configuration 
public class LoggerProvider { 
    @Bean 
    public Logger logger() { 
     return Logger.getLogger("foobar.whatever"); 
    } 
} 

然後,可以自動裝配到正常的應用程序的其餘部分。

+1

謝謝 - 這很直接,很容易實現。 @Configuration需要cglib(我使用cglib-nodep-2.2.jar),但這是我唯一的困難。 – Paul 2011-06-15 15:25:33

+0

@保羅:很高興知道。 (無論如何我都有cglib,因爲我在我的應用程序中做了複雜的AOP。) – 2011-06-15 15:30:07

2

爲了在某個東西上使用@Autowired(一個bean),你必須使這個bean受到彈簧控制。有很多方法可以做到這一點,它們取決於你想使用的日誌框架。

恐怕沒有一個「萬能」的解決方案。

通常,您可以使用由您選擇的日誌框架提供的靜態初始化程序或對其進行一些抽象(例如commons-logging)。

我發現一個參考,其中引入了@Logger註解,也許這點,你到你喜歡的方向:

http://jgeeks.blogspot.com/2008/10/auto-injection-of-logger-into-spring.html

+0

謝謝,但我發現它更直接地使用接受的答案。我沒有看到使用現有的@Autowired創建自己的註釋的好處。 – Paul 2011-06-15 15:29:43

0

爲了使記錄器可注射@Autowired,您必須擁有一個配置類,您可以在其中配置所有使用的豆類@Autowired。該課程將標有@Configuration。在那裏,你必須把以下@Bean在您的配置:

@Configuration 
public class WebConfiguration { 

    @Bean 
    @Scope("prototype") 
    public Logger produceLogger(InjectionPoint injectionPoint) { 
     Class<?> classOnWired = injectionPoint.getMember().getDeclaringClass(); 
     return LoggerFactory.getLogger(classOnWired); 
    } 
} 
相關問題