getsentry / getsentry/sentry-java

`SentryLogbackInitializer` is initialized too late

未关闭
#3,650 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
Improvement Java Logs
主要语言
Kotlin
星标
1.4k
派生
478
平均合并
2 天 23 小时
30 天内合并 PR
67

描述

### 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](https://docs.spring.io/spring-boot/reference/features/spring-application.html#features.spring-application.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](https://github.com/spring-projects/spring-boot/blob/7936de70d897fcc8cc929b9afe2dfc8ac7ad0adf/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/logging/LoggingApplicationListener.java#L218).

### Solution Brainstorm

1. Instead of using `SentryLogbackAppenderAutoConfiguration`, how about registering the listener quickly by configuring it in `spring.factories` like:
```
org.springframework.context.ApplicationListener=\
io.sentry.spring.boot.jakarta.SentryLogbackInitializer
```

2. Currently, `SentryLogbackInitializer` supports events of type `ContextRefreshedEvent`, but even with early listener registration, a lot of tasks may already have been performed by the time `ContextRefreshedEvent` is published. Can we initialize it at the time of `ApplicationEnvironmentPreparedEvent` publication?

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。