Measure logo

Adaptive Capture

Tune what Measure collects from the dashboard. Adjust sampling, masking, and log collection without releasing a new app version.

Adaptive Capture lets you tune what Measure collects straight from the dashboard, without releasing a new app version. Adjust sampling rates, screenshot masking, log collection, and more from the "Apps" tab.

The SDK fetches this configuration and caches it locally, so a change takes two app launches to take effect. The first launch fetches and caches the new settings, and the next one applies them.

Defaults

Every app starts with these defaults:

ConfigurationDefault value
Take screenshot on fatal errortrue
Session replay for fatal errorstrue
Session replay for unhandled errorsfalse
Session replay for handled errorsfalse
Error session replay duration300 seconds (5 minutes)
Fatal error sampling rate100%
Unhandled error sampling rate100%
Handled error sampling rate0%
Take screenshot on ANRtrue
ANR session replay duration300 seconds (5 minutes)
Bug report session replay duration300
Trace sampling rate100%
Journey sampling rate100%
Launch metrics sampling rate100%
Disable HTTP event for URLs(empty)
Track HTTP request body for URLs(empty)
Track HTTP response body for URLs(empty)
Blocked HTTP headersAuthorization, Cookie, Set-Cookie, Proxy-Authorization, WWW-Authenticate, X-Api-Key
Screenshot mask levelAllTextAndMedia
Automatic log collectionfalse
Minimum log severityWarning
Log ignore patterns(empty)

Errors

Fatal, unhandled, and handled errors each get their own session replay switch and sampling rate. See error severity for what the three mean. ANRs have their own settings, below.

Screenshots

Every fatal error report includes a screenshot of the screen at the moment it happened. Turn this off if you'd rather not capture screenshots.

Errors thrown in Dart never include a screenshot, since an uncaught Flutter error can fire on every frame. In a Flutter app this setting only applies to native crashes.

Session replay

Choose which severities come with a replay of the events before the error. Only fatal errors do by default.

SDKs released before these switches existed always collect a replay for fatal and unhandled errors.

Session replay duration

One duration applies to every severity that collects a replay. By default it covers the 5 minutes before the error. A longer window shows more of what led up to the error and sends more data.

Sampling

Set a rate per severity to control how many of its errors are reported. All fatal and unhandled errors are reported by default. Handled errors aren't, since apps tend to produce a lot of them, so raise that rate when you want them.

An error dropped by sampling can still reach the dashboard if it falls inside a replay window collected for another error.

ANRs

ANRs are collected on Android only.

Screenshots

Each ANR report includes a screenshot of the screen at the moment it happened. Turn this off if you'd rather not capture screenshots.

Session replay duration

Every ANR arrives with a replay of the events in the minutes before it. By default it captures the 5 minutes before the ANR.

Bug reports

Session replay duration

Each bug report carries a replay of what the user did before submitting it. Set how far back it reaches to capture more or less of the session. By default it goes back 5 minutes.

Trace sampling

Measure reports every trace by default. Set the sampling rate anywhere from 100% down to 0.001% to control how much trace data you collect.

Launch metrics sampling

Launch metrics cover cold, warm, and hot launches, shown on the Overview page in the dashboard. Set a sampling rate to control how many sessions collect them. Every session collects launch metrics by default, and you can lower the rate to 0.001%.

Journey sampling

Journey events power the Journey view in the dashboard. They cover screen view events on all platforms, activity and fragment lifecycle events on Android, and view controller lifecycle events on iOS. Set a sampling rate to control how many sessions collect them. Every session collects journey events by default, and you can lower the rate to 0.001%.

HTTP events

HTTP events record the network requests your app makes. Tune what gets collected with the options below.

Sampling

Required minimum SDK versions: Android 0.16.1 and iOS 0.9.2

Set a sampling rate to control how often HTTP events are collected. All of them are collected by default, and you can lower the rate to 0.001%.

Collect or ignore specific URLs

Turn HTTP event collection on or off for specific URLs. Match a URL exactly, or use * as a wildcard.

Examples:

  • Disable a specific endpoint: https://example.com/api/v1/users
  • Disable a domain and all its endpoints: https://example.com/*
  • Disable a specific path across all domains: */api/v1/orders
  • Disable a specific URL path: https://example.com/api/*/payments

Request body collection

Request bodies and headers aren't collected by default. List the URLs you want them collected for, matching exactly or with * wildcards. Enable this only for URLs you trust to be free of sensitive data and small in payload size.

Response body collection

Response bodies and headers aren't collected by default either. List the URLs you want them collected for, using exact matches or * wildcards. As with request bodies, reserve this for URLs without sensitive data and with small payloads.

Blocked headers

Headers are only collected for URLs where you've enabled request or response body collection. Even then, you can block specific headers by name. Matching is case-insensitive.

These headers are never collected, whether or not you list them:

  • Authorization
  • Cookie
  • Set-Cookie
  • Proxy-Authorization
  • WWW-Authenticate
  • X-Api-Key

Screenshot mask level

Mask screenshots collected with errors and ANRs to keep sensitive information from leaking. Pick how much to hide.

The mask level configuration does not apply to SwiftUI screens. Because of the way SwiftUI renders its views, all SwiftUI content is masked by default regardless of the mask level setting. Control masking for individual SwiftUI views with the .msrMask() and .msrUnmask() modifiers.

Choose from these levels:

Mask all text and media

Hides all text, buttons, input fields, images, and video.

Mask All Text And Media

Mask all text

Hides all text, buttons, and input fields.

Mask All Text

Mask text except clickable

Hides all text and input fields, but leaves clickable views like buttons visible.

Mask Text Except Clickable

Mask sensitive input fields

Hides sensitive input fields like password, email, and phone fields.

Mask Sensitive Input Fields

Logs

The Logs settings control how the SDK collects logs.

Automatic log collection

Applies only to Android and React Native.

Collect logs written to the platform's standard log streams automatically. Logs you track manually with the log API are always collected, whatever this is set to. Off by default.

Minimum log level

Set the lowest severity worth collecting. Anything below it is dropped at the source, for both automatic logs and logs tracked with the Measure.log API. The levels, from lowest to highest, are debug, info, warning, error, and fatal. By default Measure keeps warning and above, dropping debug and info.

Ignore patterns

List regular expressions to match against the log body. Any log whose body matches a pattern is discarded at the source.

Think this page can be better?

Open an issue