Features
- Add
LocalSentrySpantosentry-composeso apps can provide a parentISpanto a composable subtree and have nestedSentryTracedspans attach to it ([#6112]https://github.com/getsentry/sentry-java/pull/6112) - Add
dataCollection, a fine-grained replacement forsendDefaultPii, for controlling data collected automatically by SDK integrations (#5759)
[!WARNING]
sendDefaultPiiwill be removed in the next major SDK version. Migrate todataCollectionbefore upgrading.
- Until then, when
dataCollectionis not configured, the SDK preserves the existingsendDefaultPiibehavior. - Configuring any
dataCollectionoption makes it the source of truth.sendDefaultPiiis then ignored, and omitteddataCollectionoptions use the defaults below. - The Logback appender is a compatibility exception. When an encoder is configured,
sendDefaultPii=truecontinues to include the original message template and parameters. To opt in independently ofsendDefaultPii, set<includeUnencodedMessage>true</includeUnencodedMessage>on the Sentry appender inlogback.xmlorlogback-spring.xml. - Data explicitly supplied through APIs such as
Sentry.setUser, scopes, event processors, orbeforeSendis not affected.
To opt in to the documented dataCollection defaults without configuring an individual option:
java
Sentry.init(options -> options.getDataCollection().forceDataCollection());
| Option | Default | Behavior |
|---|---|---|
userInfo |
true |
Allows integrations to populate user identity and IP address information automatically. |
cookies |
{ mode: DENY_LIST, terms: [] } |
Collects cookies while filtering sensitive values. |
httpHeaders.request |
{ mode: DENY_LIST, terms: [] } |
Collects request headers while filtering sensitive values. |
httpHeaders.response |
{ mode: DENY_LIST, terms: [] } |
Collects response headers while filtering sensitive values. |
httpBodies |
All supported body types | Collects supported incoming and outgoing request and response bodies. An empty set disables body collection. |
urlQueryParams |
{ mode: DENY_LIST, terms: [] } |
Collects URL query parameters while filtering sensitive values. |
graphql.document |
true |
Collects GraphQL documents. |
graphql.variables |
true |
Collects GraphQL variables. |
databaseQueryData |
true |
Allows collection of associated query data, such as bound parameters, write payloads, and results, where supported. Sanitized query statements and structural database metadata remain available. |
filePaths |
true |
Allows file-system instrumentation to collect file and directory paths. File extensions and byte counts remain available when disabled. |
Cookies, HTTP headers, and URL query parameters support three modes:
OFF: Do not collect the category.DENY_LIST: Collect values except those matching the built-in sensitive deny-list or additional configured terms.ALLOW_LIST: Only send plaintext values for matching terms. The built-in sensitive deny-list still applies.
Matching is case-insensitive and partial. The built-in sensitive deny-list contains auth, token, secret, password, passwd, pwd, key, jwt, bearer, sso, saml, csrf, xsrf, credentials, session, sid, and identity. Filtered values are replaced with "[Filtered]". Custom deny-list terms extend rather than replace this list.
Configure all HTTP body types, a custom cookie deny-list, a request-header allow-list, and disable URL query parameter and file path collection in an options callback:
java
Sentry.init(
options -> {
options
.getDataCollection()
.setHttpBodies(
EnumSet.of(
HttpBodyType.INCOMING_REQUEST,
HttpBodyType.OUTGOING_REQUEST,
HttpBodyType.INCOMING_RESPONSE,
HttpBodyType.OUTGOING_RESPONSE));
options
.getDataCollection()
.setCookies(
KeyValueCollectionBehavior.denyList(
"forwarded", "-ip", "remote-", "via", "-user"));
options
.getDataCollection()
.getHttpHeaders()
.setRequest(
KeyValueCollectionBehavior.allowList("content-type", "x-request-id"));
options
.getDataCollection()
.setUrlQueryParams(KeyValueCollectionBehavior.off());
options.getDataCollection().setFilePaths(false);
});
Configure the same options in sentry.properties:
properties
data-collection.http-bodies=incoming_request,outgoing_request,incoming_response,outgoing_response
data-collection.cookies.mode=deny_list
data-collection.cookies.terms=forwarded,-ip,remote-,via,-user
data-collection.http-headers.request.mode=allow_list
data-collection.http-headers.request.terms=content-type,x-request-id
data-collection.url-query-params.mode=off
data-collection.file-paths=false
Configure them with Spring Boot properties:
properties
sentry.data-collection.http-bodies=incoming-request,outgoing-request,incoming-response,outgoing-response
sentry.data-collection.cookies.mode=deny-list
sentry.data-collection.cookies.terms=forwarded,-ip,remote-,via,-user
sentry.data-collection.http-headers.request.mode=allow-list
sentry.data-collection.http-headers.request.terms=content-type,x-request-id
sentry.data-collection.url-query-params.mode=off
sentry.data-collection.file-paths=false
Configure them in AndroidManifest.xml:
xml
<meta-data
android:name="io.sentry.data-collection.http-bodies"
android:value="incoming_request,outgoing_request,incoming_response,outgoing_response" />
<meta-data
android:name="io.sentry.data-collection.cookies.mode"
android:value="deny_list" />
<meta-data
android:name="io.sentry.data-collection.cookies.terms"
android:value="forwarded,-ip,remote-,via,-user" />
<meta-data
android:name="io.sentry.data-collection.http-headers.request.mode"
android:value="allow_list" />
<meta-data
android:name="io.sentry.data-collection.http-headers.request.terms"
android:value="content-type,x-request-id" />
<meta-data
android:name="io.sentry.data-collection.url-query-params.mode"
android:value="off" />
<meta-data
android:name="io.sentry.data-collection.file-paths"
android:value="false" />
See the Data Collection documentation for all configuration keys, supported integrations, and migration guidance.