哨兵收到我的日志消息,但没有收到我的例外

时间:2019-08-07 13:18:34

标签: java dropwizard sentry

在Dropwizard项目中使用Sentry时,我遇到了一个奇怪的问题。

我在两个具有相似框架的应用程序中对其进行了配置。

其中之一是,我正在正确跟踪所有日志消息,但没有跟踪异常,应该知道,我不知道为什么。

我注意到的与运行的应用程序不同的是:

java.lang.Exception: some error
        at testEndpoint(EventResource.kt:38)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)

vs可以正常运行的应用程序:

io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 22059c429b65153e
! java.lang.Exception: Test Hello Exception
! at myMethod(TestResource.kt:40)
! at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
! at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
! at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

我注意到其中涉及一个LoggingExceptionMapper,它是由Dropwizard自动激活的,但是似乎没有。

我正在使用哨兵1.7.23和Dropwizard 1.3.9

关于我的依赖关系:

implementation("io.sentry:sentry:$sentryVersion")
implementation("io.sentry:sentry-logback:$sentryVersion")
implementation("org.dhatim:dropwizard-sentry:1.3.1-1")

我最后一个依赖项是作为一个帮手,不必创建我的工厂并在config.yml上指定日志记录附加程序的值

https://github.com/dhatim/dropwizard-sentry

两个项目都以这种方式进行初始化:

Sentry.init("some-value...")

我的config.yml

logging:
  level: INFO
  appenders:
    - type: console
    - type: sentry
      threshold: ${SENTRY_THRESHOLD}
      dsn: ${SENTRY_DSN}
      environment: ${SENTRY_ENVIRONMENT}
      release: 1.0.0

有什么问题的想法吗?

由于Logback包含在Dropwizard的核心库中,因此无需依赖于日志

2 个答案:

答案 0 :(得分:0)

LoggingExceptionMapper的实现在dropwizard-jersey项目中

尝试将依赖项添加到:dropwizard-jersey

答案 1 :(得分:0)

如果有独立性冲突,则可以用两种方法进行检查。

1)只需在cmd或IDE的控制台上使用以下命令,这将向您显示依赖关系树,您可以从树中搜索哪个库发生冲突。

      mvn dependency:tree -Dverbose -Dincludes=commons-collections

参考链接:https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

2)这是查找依赖项冲突的最有效方法。在pom.xml中添加以下插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.4.1</version>
        <configuration>
            <rules>
                <dependencyConvergence />
            </rules>
        </configuration>
    </plugin>

然后使用 enforcer:enforce 目标构建项目,该项目将向您显示版本冲突的确切依赖关系。如果您发现任何冲突库,只需排除它们即可。

使用上述方法后,如果遇到相同的问题,请尝试使用1.3升级版本,或在添加org.glassfish.jersey.media依赖项后尝试。

希望任何一种方式都能为您服务。