Spring 1.X 中的 Sentry 根本不起作用

问题描述 投票:0回答:1

我们有一个 spring 1.5.17 应用程序,正在尝试简单地集成 Sentry。因为这是 Spring 的旧版本(不,不可能升级),所以我们遵循 Sentry 的

Legacy SDK 1.7
指示这里。这非常简单。

配置

这是pom.我们还使用其他 spring 库,例如logging/actuator/jpa,但为了清楚起见没有显示。都是一样的春季版本。

<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-spring</artifactId>
    <version>1.7.30</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.17.RELEASE</version>
</dependency>

另外,在

sentry.properties
下添加了
src/main/resources
文件。

enabled=true
dsn=***
environment=uat
sample.rate=1.0
stacktrace.app.packages=com.pls
stacktrace.hidecommon=false

申请

创建了一个样板配置文件,按照哨兵文档覆盖两个 bean。

@Configuration
public class SentryConfig {

    @Bean
    public HandlerExceptionResolver sentryExceptionResolver() {
        return new io.sentry.spring.SentryExceptionResolver();
    }

    @Bean
    public ServletContextInitializer sentryServletContextInitializer() {
        return new io.sentry.spring.SentryServletContextInitializer();
    }
}

通过断点,我确认这些 bean 正在初始化,并且它们正确地从

sentry.properties
获取属性。一个相关线程,我发现如果我手动进行
SentryClient.captureEvent(event)
调用,那么事件会显示在哨兵中。 这意味着哨兵客户端已正确设置并工作,但 spring 实际上并未调用
.captureEvent()

为了证实我的怀疑,我进入了 SentryExceptionResolver bean 并确认代码从未遇到此断点。

我尝试通过在

@RestController
即中抛出虚拟错误来触发断点。

@GET
@Path("/test")
public Object throwError(){
  LOGGER.error("ERROR BEING LOGGED");
  throw new RuntimeException("ERROR THROWN");
}

虽然控制台日志中肯定会抛出此错误,但它不会触发

.capture()
代码路径。

记录?

相关线程提到了一些与日志记录模块有关的内容,但我不明白这是如何相关的。

sentry-spring
依赖项正在加载所有应用程序需求,并且客户端正在初始化,只是从未实际调用!!

无论如何,我尝试添加各种日志依赖项(例如,如本sentry文档中所述的logback),但无济于事。我的配置中可能缺少什么!?!?

如果重要的话,我们确实使用 spring-boot-starter-logging...

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

请注意,当我添加

sentry-logback
依赖项时,应用程序不会加载。

java spring spring-boot sentry
1个回答
2
投票

看来您正在使用 JAX-RS 而不是 Spring MVC。没有开箱即用的 JAX-RS - Sentry 集成。

要将异常转发到 Sentry,您还可以使用

sentry-logback
集成。您可以配置 Logback 将任何记录器错误转发到 Sentry。没有 Spring 集成的缺点是错误不会用 HTTP 请求中的上下文信息进行修饰。

© www.soinside.com 2019 - 2024. All rights reserved.