2015-07-13 152 views
0

是否可以擴展Spring Boot StartupInfoLogger以便我可以在啓動時打印更多信息?Spring - 擴展StartupInfoLogger

我的目的是記錄一些應用程序相關的信息,但使用

@PostConstruct 
public void contextInitialized() { 
    logger.info("My information"); 
} 

各種豆類的初始化前的信息被記錄,而我想讓我的消息在的盡頭記錄bean的初始化過程(或者儘可能接近)就像StartupInfoLogger一樣。

有沒有辦法擴展這個類?任何其他建議獲得相同的結果,而不涉及StartupInfoLogger

+0

和做的時候,你想要什麼:

我在@Configuration

/** * Listener for application start */ @Bean public StartEventListener startListener() { return new StartEventListener(Module.PARSING); } 

獲得正確的日誌在啓動時間結束之前具有此日誌行的結果註冊的StartEventListener登錄? –

+0

關於我啓動的應用程序的一些信息可以通過日誌分析工具來觸發,以提高自動化程度。當我想要記錄可能在應用程序啓動後,創建所有的bean。 –

+0

擴展'StartupInfoLogger'不會做任何事情。您可以創建一個'ApplicationListener '監聽器,當應用程序啓動並準備使用時將會調用該監聽器。 –

回答

0

我設法成功地實現了什麼,我想創建一個新的類中實現ApplicationListener<ContextRefreshedEvent>

public class StartEventListener implements 
     ApplicationListener<ContextRefreshedEvent> { 

    Logger   logger   = Logger.getLogger(StartEventListener.class); 

    // Module launched by the applications using this Listener 
    final Module module; 

    public StartEventListener(Module module) { 
     super(); 
     this.module = module; 
    } 

    @Override 
    public void onApplicationEvent(ContextRefreshedEvent applicationEvent) { 
     logger.warn("Module " + module.getName() + " started"); 
    } 
} 

我增加了模塊的信息,但我們可以添加我們想要的任何信息。

2015-07-13 10:41:19,564 GMT [main] (StartEventListener.java:31) WARN spring.StartEventListener: Module parsing started 
2015-07-13 10:41:19,567 GMT [main] (StartupInfoLogger.java:56) INFO parsing.Parsing: Started Parsing in 2.154 seconds (JVM running for 2.476) 
+0

爲什麼還打擾有一個私人的無參數構造函數?我適合不可能使用,那麼就不要添加它。爲您節省一些代碼和醜陋的註釋。 –

+0

我添加了它,因爲我繼承了應該工作的父構造函數,並且我想100%確定我將擁有模塊信息。關於醜陋的註解,你是對的,但我通常添加它不會在我的IDE上發出警告......我認爲在這種情況下,我可以將它去掉 –

+2

如果你指定了一個構造函數,那麼沒有默認的構造函數編譯器。所以它不會添加任何東西只有噪聲...如果你只有一個構造函數,它採用一個'Module'而不是它總是和將會成爲構建實例的唯一方法,但是通過添加,使用反射,你可以由於私有無參數構造函數的可用性而創建無效實例。如前所述,刪除它,甚至更好地使'module'字段成爲final。 –