我们有一个spring1.5.17应用程序,并试图简单地集成sentry。因为这是一个旧版本的spring(没有升级是不可能的),所以我们遵循sentry的 Legacy SDK 1.7
这里有方向。这很简单。
配置
这是波姆。我们也使用了其他spring库,比如logging/actuator/jpa,但为了清晰起见没有显示。都是相同的 Spring 版本。
<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
应用
根据sentry文档创建了一个样板配置文件,覆盖两个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)
电话,然后事件出现在哨兵。这意味着sentry客户机设置正确并且工作正常,但是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)都没有用。我的配置可能缺少什么!?!?
如果有关系的话,我们使用SpringBootStarter日志。。。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
注意,当我添加 sentry-logback
依赖关系,应用程序不加载。
1条答案
按热度按时间erhoui1w1#
看起来您使用的是jax-rs而不是springmvc。没有现成的jax rs-sentry集成。
要将异常转发给sentry,还可以使用
sentry-logback
整合。您可以配置logback将任何记录器错误转发给sentry。没有spring集成的缺点是错误没有用http请求的上下文信息修饰。