【发布时间】:2021-03-04 09:08:01
【问题描述】:
我们有一个 spring 1.5.17 应用程序,并且正在尝试简单地集成 Sentry。因为这是 Spring 的旧版本(无法升级),所以我们遵循 Sentry 的 Legacy SDK 1.7 指示 here。这很简单。
配置
这里是 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>
另外,在src/main/resources下添加了sentry.properties文件。
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 获取属性。一个related thread,我发现如果我手动拨打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() 代码路径。
记录?
related thread 提到了一些与日志模块有关的内容,但我不明白这有什么关系。 sentry-spring 依赖项正在加载所有应用程序需求并且正在初始化客户端,只是从未真正调用过!!
无论如何,我尝试添加各种日志依赖项(例如,sentry doc 中描述的 logback)无济于事。我的配置中可能缺少什么!?!?
如果重要的话,我们确实使用 spring-boot-starter-logging...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
请注意,当我添加 sentry-logback 依赖项时,应用程序不会加载。
【问题讨论】:
-
你在那里使用 Spring MVC 吗?
@GET和@Path在我看来就像 JAX-RS。不过,Logback 集成应该适合您。尝试 3.x 的最新 sentry-logback:docs.sentry.io/platforms/java/guides/logback -
是的 - 你的权利是 JAX-RS。这可以解释为什么没有拾取异常处理程序吗?我会尝试使用合适的弹簧控制器。关于 logback,我会尝试更新的 logback repo,但是你能帮我理解添加这个 logback 依赖项实际上在做什么吗?链接的线程也以这种方式解决,我不明白为什么某些日志记录框架会影响错误处理程序被调用...?
-
@MaciejWalkowiak - 你是对的,因为我正在使用 JAX-RS。谢谢你抓。这是一个继承的项目,我什至没有注意到其中的区别......如果你想发表作为答案,我会接受并给你代表
标签: java spring spring-boot sentry