Spring
There are two variants of Sentry available for Spring. If you're using Spring 5, use sentry-spring
(GitHub). If you're using Spring 6, use sentry-spring-jakarta
instead (GitHub).
Sentry's integration with Spring supports Spring Framework 5.1.2 and above to report unhandled exceptions and optional user information. If you're on an older version, use our legacy integration.
- Provides a HandlerExceptionResolver to send unhandled exceptions to Sentry
- Attaches HTTP request information to every
SentryEvent
recorded within the scope of the request - Provides the ability to record user information
To use Sentry with Spring Boot, we recommend using Sentry Spring Boot integration as it provides richer configuration capabilities.
On this page, we get you up and running with Sentry's SDK.
Using a framework?
Check out the other SDKs we support in the left-hand dropdown.
Don't already have an account and Sentry project established? Head over to sentry.io, then return to this page.
Sentry captures data by using an SDK within your application’s runtime.
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>7.9.0</version>
</dependency>
For other dependency managers see the central Maven repository (Spring 5) and central Maven repository (Spring 6).
We recommend using our Gradle plugin as it can add integrations and provide source context for events.
If you are manually adding multiple Sentry dependencies, you can add a bill of materials to avoid specifying the version of each dependency.
Configuration should happen as early as possible in your application's lifecycle.
The sentry-spring
and sentry-spring-jakarta
libraries provide an @EnableSentry
annotation that registers all required Spring beans. @EnableSentry
can be placed on any class annotated with @Configuration including the main entry class in Spring Boot applications annotated with @SpringBootApplication.
import io.sentry.spring.EnableSentry;
// NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry
// project/dashboard
@EnableSentry(dsn = "https://examplePublicKey@o0.ingest.sentry.io/0")
@Configuration
class SentryConfiguration {
}
The DSN can be also provided through the system property sentry.dsn
, environment variable SENTRY_DSN
or the dsn
property in sentry.properties
file. See the configuration page for more details on external configuration.
Once this integration is configured you can also use Sentry’s static API, as shown on the usage page, to record breadcrumbs, set the current user, or manually send events, for example.
By default, only unhandled exceptions are sent to Sentry. This behavior can be tuned through configuring the exceptionResolverOrder
property. For example, setting it to Ordered#HIGHEST_PRECEDENCE
ensures exceptions that have been handled by exception resolvers with higher order are sent to Sentry - including ones handled by @ExceptionHandler
annotated methods.
import io.sentry.spring.EnableSentry;
import org.springframework.core.Ordered;
// NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry
// project/dashboard
@EnableSentry(
dsn = "https://examplePublicKey@o0.ingest.sentry.io/0",
exceptionResolverOrder = Ordered.LOWEST_PRECEDENCE
)
class SentryConfiguration {
}
This snippet includes an intentional error, so you can test that everything is working as soon as you set it up.
import io.sentry.Sentry;
try {
throw new Exception("This is a test.");
} catch (Exception e) {
Sentry.captureException(e);
}
Learn more about manually capturing an error or message in our Usage documentation.
To view and resolve the recorded error, log into sentry.io and open your project. Clicking on the error's title will open a page where you can see detailed information and mark it as resolved.
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").