# JVM & .NET

> **For agents:** paste the DSN from `list_keys` into the snippet for the platform; create the project with the matching platform id (`create_project(org="acme", slug="web", name="Web", platform="springboot")`). Platforms on this page: `springboot`, `dotnet`.

Both platforms are configuration-first: the Spring Boot starter reads `application.properties`, ASP.NET Core wires through `UseSentry` on the host builder. Logging frameworks (Logback/Log4j2, `ILogger`) become breadcrumbs and, at error level, events.

Replace `https://<public_key>@ingest.bugwatch.io/<project_number>` with the DSN from `list_keys` or the project's settings page.

## Spring Boot

- Platform id: `springboot` · Language: Java / Kotlin · Runs in: server
- Install: `implementation 'io.sentry:sentry-spring-boot-starter-jakarta:8.+'`
- Files: application.properties

```properties
sentry.dsn=https://<public_key>@ingest.bugwatch.io/<project_number>
sentry.traces-sample-rate=1.0
sentry.release=@project.version@
sentry.send-default-pii=false
# Report handled exceptions from @ExceptionHandler too:
sentry.exception-resolver-order=-2147483647
# Logback: capture WARN+ as breadcrumbs, ERROR as events
sentry.logging.minimum-event-level=error
sentry.logging.minimum-breadcrumb-level=info
```

Lifecycle notes:

- Auto-configuration installs a HandlerExceptionResolver for MVC/WebFlux and hooks Logback/Log4j2 — no code changes.
- Exceptions swallowed by @ControllerAdvice are only reported with exception-resolver-order set to the lowest value.
- Async tasks (@Async, WebClient, RestTemplate) propagate the trace when using the starter's instrumented beans; @Scheduled jobs report via sentry-spring's scheduling support.
- Enable sentry-apache-http-client-5 / sentry-jdbc for outbound HTTP and query spans.

## ASP.NET Core

- Platform id: `dotnet` · Language: C# · Runs in: server
- Install: `dotnet add package Sentry.AspNetCore`
- Files: Program.cs

```csharp
builder.WebHost.UseSentry(o => {
    o.Dsn = "https://<public_key>@ingest.bugwatch.io/<project_number>";
    o.TracesSampleRate = 1.0;
    o.Release = typeof(Program).Assembly.GetName().Version?.ToString();
    o.MinimumEventLevel = LogLevel.Error;   // ILogger errors become events
});
app.UseSentryTracing();
```

Lifecycle notes:

- UseSentry hooks the host builder: unhandled middleware exceptions, ILogger errors and request breadcrumbs are automatic.
- Background services need SentrySdk.CaptureException in their catch blocks; hosted services inherit the DI-configured client.

## Symbolication for this family

JVM and .NET stack traces are symbolic; no maps to upload. ProGuard/R8 only matters for Android — see [Mobile & desktop](https://docs.bugwatch.io/sdks/mobile-desktop.md).
