2015-07-13 50 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。 –