You can click into an issue and get a detailed event report in the
**DevOps \& Engagement** \> [**Crashlytics** dashboard](https://console.firebase.google.com/project/_/crashlytics) of the
Firebase console. You can customize those reports to help you better
understand what's happening in your app and the circumstances around events
reported to Crashlytics.

- [Log custom keys](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#add-keys)
  (Apple, Android, Web, Flutter, and Unity)

- [Log custom log messages](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#add-logs)
  (Apple, Android, Flutter, and Unity)

- [Log user identifiers](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#set-user-ids)
  (Apple, Android, Flutter, and Unity)

- [Report exceptions](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#log-excepts)
  (Apple, Android, Web, Flutter, and Unity)

- [Get breadcrumb logs](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#get-breadcrumb-logs)
  (Apple, Android, Flutter, and Unity)

- [Enable opt-in reporting](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#enable-reporting)
  (Apple, Android, Flutter, and Unity)

- [Force flush telemetry records](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#flush-telemetry-records)
  (Web only)

- [Configure sampling rate](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#configure-sampling)
  (Web only)

- [Disable or enable telemetry collection](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#disable-or-enable-telemetry)
  (Web only)

- [Include GWP-ASan reports](https://firebase.google.com/docs/crashlytics/customize-crash-reports.md.txt#gwp-asan)
  (Android NDK and Unity only)

### Log custom keys

Custom keys help you get the specific state of your app leading up to a crash.
You can associate arbitrary key-value pairs with your crash reports, then use
the custom keys to search and filter crash reports in the Firebase console.

View instructions for logging custom keys:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#add-keys)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#add-keys)
[Web](https://firebase.google.com/docs/crashlytics/web/customize-crash-reports.md.txt#add-keys)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#add-keys)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#add-keys)

### Log custom log messages

To give yourself more context for the events leading up to a crash, you can add
custom Crashlytics logs to your app. Crashlytics associates the logs
with your crash data and displays them in the Crashlytics dashboard.

View instructions for logging custom log messages:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#add-logs)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#add-logs)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#add-logs)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#add-logs)

### Log user identifiers

To diagnose an issue, it's often helpful to know which of your users experienced
a given crash. Crashlytics includes a way to anonymously identify users in
your crash reports.

View instructions for logging user identifiers:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#set-user-ids)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#set-user-ids)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#set-user-ids)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#set-user-ids)

### Report exceptions

In addition to automatically reporting your app's *fatal* events (like crashes),
the Crashlytics SDK can report non-fatal exceptions as *non-fatal* events.
For Futter and Unity, if you have exceptions that are expected, you can have the
SDK report them as non-fatal events, as well. For web apps, you can manually
report handled exceptions in addition to uncaught exceptions and routing errors.

For mobile apps, these non-fatal events are logged on-device and then sent along
with the next fatal event report or when the end-user restarts the app.

View instructions for reporting exceptions:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#log-excepts)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#log-excepts)
[Web](https://firebase.google.com/docs/crashlytics/web/customize-crash-reports.md.txt#log-excepts)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#log-excepts)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#log-excepts)

### Get breadcrumb logs

Breadcrumb logs give you a better understanding of the interactions that a user
had with your app leading up to a crash, non-fatal, or ANR event. These logs can
be helpful when trying to reproduce and debug an issue.

View instructions for getting breadcrumb logs:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#get-breadcrumb-logs)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#get-breadcrumb-logs)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#get-breadcrumb-logs)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#get-breadcrumb-logs)

### Enable opt-in reporting

By default, Crashlytics automatically collects crash reports for all your
app's users. To give users more control over the data they send, you can enable
opt-in reporting by disabling automatic reporting and only sending data to
Crashlytics when you choose to in your code.

View instructions for enabling opt-in reporting:
[iOS+](https://firebase.google.com/docs/crashlytics/ios/customize-crash-reports.md.txt#enable-reporting)
[Android](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#enable-reporting)
[Flutter](https://firebase.google.com/docs/crashlytics/flutter/customize-crash-reports.md.txt#enable-reporting)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#enable-reporting)

### Force flush telemetry records

By default, the web telemetry engine batches logs in memory before uploading
them. For short-lived execution environments, you can force an immediate upload
of queued errors before the execution context terminates or reloads.

View instructions for flushing telemetry records:
[Web](https://firebase.google.com/docs/crashlytics/web/customize-crash-reports.md.txt#flush-telemetry-records)

### Configure sampling rate

For web apps, you can configure a sampling rate in the Firebase console or
using the *Firebase Telemetry Admin API* to sample a proportion of user sessions
and control telemetry volume and cost.

View instructions for configuring sampling rate:
[Web](https://firebase.google.com/docs/crashlytics/web/customize-crash-reports.md.txt#configure-sampling)

### Disable or enable telemetry collection

For web apps, telemetry collection is enabled by default when you set up
Crashlytics. You can disable or re-enable telemetry collection endpoints
dynamically using the *Firebase Telemetry Admin API*.

View instructions for disabling or enabling telemetry collection:
[Web](https://firebase.google.com/docs/crashlytics/web/customize-crash-reports.md.txt#disable-or-enable-telemetry)

### Include GWP-ASan reports to debug memory corruption issues

Crashlytics can help you debug crashes caused by native memory errors by
collecting GWP-ASan reports. These memory-related errors can be associated with
memory corruption within your app, which is the leading cause of app security
vulnerabilities.

View instructions for including GWP-ASan reports:
[Android NDK](https://firebase.google.com/docs/crashlytics/android/customize-crash-reports.md.txt#gwp-asan)
[Unity](https://firebase.google.com/docs/crashlytics/unity/customize-crash-reports.md.txt#gwp-asan-unity)