2017-03-17 68 views
0

我使用的是Spring Boot 1.5.2Logback,它使用logback-spring.xml配置。在那裏,我定義了一個自定義類型的appender(RollingFileAppender的子類),並希望獲得一對注入的bean。用彈簧引導向Logback Appender依賴注入

這可能嗎?我天真地嘗試註釋appender @Component等,但因爲它是由Logback/Joran創建的,所以它當然不起作用。有我可以申請的技巧嗎?

如果不可能,實現我的目標的規範方式是什麼(從應用程序上下文中將bean插入到appender中)?

回答

2

這是不可能做你想做的事情。 Logback在創建應用程序上下文之前被初始化,所以沒有任何東西可以執行依賴注入。

也許你可以問另一個問題,描述你想要你的appender能夠做什麼?可能有一個解決方案不涉及向其中注入Spring管理的bean。

+0

然後,在應用程序上下文準備好後,稍後再添加appender嗎? – wujek

+1

@wujek http://stackoverflow.com/questions/16910955/programmatically-configure-logback-appender#17215011 –

0

嘗試定義這樣一個bean,並調用它的靜態的getBean方法,而不是使用依賴注入:

@Component 
public class BeanFinderGeneral implements ApplicationContextAware { 

    private static ApplicationContext applicationContext; 

    public static <T> T getBean(Class<T> clazz) { 
     return applicationContext.getBean(clazz); 
    } 

    @Override 
    public void setApplicationContext(ApplicationContext pApplicationContext) throws BeansException { 
     applicationContext = pApplicationContext; 
    } 
} 
0

在春季啓動時,您可以編寫一個配置類,並創建您的logback類的bean作爲如下:

@Component 
@Configuration 
public class LogBackObjectBuilder { 

@Bean 
public RollingFileAppender myRollingFileAppender() { 
    return new YOUR-SUB-CLASS-OF-RollingFileAppender(); 
} 
} 

只有在spring中掃描過這個類,纔會在上下文中創建並注入這個Bean。 我希望我能理解你的問題。你希望你的自定義appender被注入到應用程序上下文中。

0

使用logback-extensions您可以在彈簧應用程序上下文文件或彈簧配置工廠中創建您的appender。

+0

最後一次提交:2015年9月10日。我曾經決定在我問之前不要使用它,但無論如何感謝。 – wujek