Features
- Add
LocalSentrySpantosentry-composeso apps can provide a parentISpanto a composable subtree and have nestedSentryTracedspans attach to it ([#6112]#6112) - Add
dataCollection, a fine-grained replacement forsendDefaultPii, for controlling data collected automatically by SDK integrations (#5759)
Warning
sendDefaultPii will be removed in the next major SDK version. Migrate to dataCollection before 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:
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:
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:
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=falseConfigure them with Spring Boot 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=falseConfigure them in AndroidManifest.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.