DEV Community

James McMahon for Focused Labs

Posted on • Updated on • Originally published at

Sentry with Spring Boot

After writing this article I've revised my approach. See this follow up article for details. The approach below still works, with some caveats.

We are trying out Sentry for error alerting at Focused Labs, and I wanted to set it up in my Spring Boot backend. For the most part, Sentry has been super easy to add to a project, but I hit a few little snags with the Spring Boot integration that I wanted to share with the community.

I'll keep this short, this is what I ended up with:


Enter fullscreen mode Exit fullscreen mode

In some scenarios, this may lead to duplicate errors. The official docs warn against including both sentry-spring (which is pulled in by sentry-spring-boot-starter) and sentry-logback. Which makes sense since the Spring integration with Sentry is handling exceptions and sending them to Sentry and the Logback integration is watching logs, and then sending them to Sentry.

We are using GraphQL in our backend, so the sentry-spring behavior wasn't catching our exceptions since they are exclusively catching errors in the context of an MVC controller. Still, potentially, an exception would both be logged and caught by the Sentry exception handler, resulting in a duplicate error. If this becomes an issue, I'll have to revisit my dependencies.

This is why I am bothering with sentry-spring-boot-starter


  dsn: '<my-dsn>'
      - com.mypackage
    active: dev
  profiles: dev
  enabled: false
  environment: dev
  profiles: production
  environment: production
Enter fullscreen mode Exit fullscreen mode

Sweet sweet YAML.

Thanks to the configuration support in sentry-spring-boot-starter I can just locate my Sentry configuration right next to the rest of my Spring Boot configuration.


    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <appender name="SENTRY" class="io.sentry.logback.SentryAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="SENTRY"/>
Enter fullscreen mode Exit fullscreen mode

By using include here, I am able to defer to the default Spring Boot log configuration and only override what I absolutely need to. In this case, adding an additional appender to the root logger.

And that's it! It looks straight forward when laid out here, but took a few iterations to get everything working. Hopefully, this helps other people out with the same process.

Top comments (2)

brunogarcia profile image
Bruno Garcia

Great article! It's true that the duplicate event captured isn't ideal but sounds like we can solve that with a dedupe strategy based on weakref. We've done that in different SDKs.

Raised an issue here:

jamesmcmahon profile image
James McMahon

Thanks! Glad it was helpful.