Lifecycle report

In contrast to other reports, this report prints many small messages: 1 message on each meaningful guicey lifecycle points. This lets you:

  • See how configuration goes (and so on each stage problem appear)
  • Separate your logs (making entire startup operations order more obvious)
  • Indicate time since application startup making obvious how much time application spent on each phase.
GuiceBundle.builder()
    ...
    .printLifecyclePhases()
     // or printLifecyclePhasesDetailes() to see all confgiruation objects used on logged stage 
    .build()

Example output:

                                                                         ─────────────────
__[ 00:00:00.013 ]____________________________________________________/  1 hooks processed  \____



                                                                         ────────────────────────────────
__[ 00:00:00.121 ]____________________________________________________/  Initialized 3 (-1) GuiceyBundles  \____



                                                                         ────────────────────
__[ 00:00:00.136 ]____________________________________________________/  2 commands installed  \____



                                                                         ──────────────────────────────
__[ 00:00:00.151 ]____________________________________________________/  11 (-1) installers initialized  \____



                                                                         ────────────────────────────────
__[ 00:00:00.158 ]____________________________________________________/  14 classpath extensions detected  \____

INFO  [2019-10-13 08:33:33,925] io.dropwizard.server.DefaultServerFactory: Registering jersey handler with root path prefix: /
INFO  [2019-10-13 08:33:33,926] io.dropwizard.server.DefaultServerFactory: Registering admin handler with root path prefix: /


                                                                         ───────────────────────
__[ 00:00:00.869 ]____________________________________________________/  Started 3 GuiceyBundles  \____
...

Important

Lifecycle logs are printed to system out instead of logger because logger is not yet initialized on first events. Anyway, these logs intended to be used for problems resolution and so console only output should not be a problem.

Note

(-1) in some events in report means disabled items and actual displayed count did not count disabled items. You can see all disabled items on detailed output.

Detailed output

Detailed report (.printLifecyclePhasesDetailed()) shows all configuration objects used at current stage.

Example detailed output:

                                                                         ─────────────────
__[ 00:00:00.013 ]____________________________________________________/  1 hooks processed  \____

    hooks = 
        GuiceyTestHook               (r.v.d.g.AbstractTest)     



                                                                         ────────────────────────────────
__[ 00:00:00.118 ]____________________________________________________/  Initialized 3 (-1) GuiceyBundles  \____

    bundles = 
        GuiceRestrictedConfigBundle  (r.v.d.g.support.util)     
        CoreInstallersBundle         (r.v.d.g.m.installer)      
        WebInstallersBundle          (r.v.d.g.m.installer)      

    disabled = 
        HK2DebugBundle               (r.v.d.g.m.j.debug)        

    ignored duplicate instances = 
        HK2DebugBundle               (r.v.d.g.m.j.debug)        



                                                                         ────────────────────
__[ 00:00:00.131 ]____________________________________________________/  2 commands installed  \____

    commands = 
        DummyCommand                 (r.v.d.g.s.feature)        
        NonInjactableCommand         (r.v.d.g.s.feature)        

...    

Timer

Each log contains time marker:

__[ 00:00:00.131 ]___

Timer starts on GuiceBundle creation (it is physically impossible to start it earlier).

Note that timer also measure shutdown time (starting from initial shutdown start event):

                                                                         ─────────────────
__[ 00:00:00.000 ]____________________________________________________/  Stopping Jetty...  \____

INFO  [2019-10-13 08:36:02,882] org.eclipse.jetty.server.AbstractConnector: Stopped application@36cc9385{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
INFO  [2019-10-13 08:36:02,883] org.eclipse.jetty.server.AbstractConnector: Stopped admin@cf518cf{HTTP/1.1,[http/1.1]}{0.0.0.0:8081}
INFO  [2019-10-13 08:36:02,886] org.eclipse.jetty.server.handler.ContextHandler: Stopped i.d.j.MutableServletContextHandler@5a484ce1{Admin context,/,null,UNAVAILABLE}


                                                                         ────────────────────
__[ 00:00:00.000 ]____________________________________________________/  Jersey app destroyed  \____

INFO  [2019-10-13 08:36:02,892] org.eclipse.jetty.server.handler.ContextHandler: Stopped i.d.j.MutableServletContextHandler@3cc30dee{Application context,/,null,UNAVAILABLE}


                                                                         ─────────────
__[ 00:00:00.000 ]____________________________________________________/  Jetty stopped  \____

This may help you to spot slow shutdown logic.