`SentryLogbackInitializer` is initialized too late
Problem Statement
I am trying to use the sentry-spring-boot-starter-jakarta library. However, I have discovered that warning logs during the application startup are not being sent to Sentry. In SentryLogbackAppenderAutoConfiguration, the autoconfiguration for SentryLogbackInitializer is found, and this configuration seems to be too late.
Spring publishes events in the order described in Spring Application Events and Listeners. When configuring SentryAppender directly via logback-spring.xml without using the sentry-spring-boot-starter-jakarta library, the SentryAppender is initialized at the time of the ApplicationEnvironmentPreparedEvent publication. This is an earlier initialization point. Please refer to LoggingApplicationListener.java#L218.
Solution Brainstorm
- Instead of using
SentryLogbackAppenderAutoConfiguration, how about registering the listener quickly by configuring it inspring.factorieslike:
org.springframework.context.ApplicationListener=\
io.sentry.spring.boot.jakarta.SentryLogbackInitializer
- Currently,
SentryLogbackInitializersupports events of typeContextRefreshedEvent, but even with early listener registration, a lot of tasks may already have been performed by the timeContextRefreshedEventis published. Can we initialize it at the time ofApplicationEnvironmentPreparedEventpublication?
Thanks for opening this issue @ghoonch4! We'll look into this but I'm guessing specifying it in spring.factories would cause problems for users not having the logback dependency. We load some of our config conditionally (depending on classes available), which is what SentryLogbackAppenderAutoConfiguration does via some @ConditionalOn... annotations. Our current suggestion is to configure the logback XML config file if you want startup logs to be captured.