datadog_flutter 2.0.0 datadog_flutter: ^2.0.0 copied to clipboard
Community implementation of native bindings for Datadog's SDK. Not an official package.
Use the Official Datadog Flutter SDK Instead of This Package #
This package has been deprecated in favor of the official Datadog Flutter SDK. Please see the announcement or skip ahead to the new, official repo.
Datadog Flutter #
Community implementation of native bindings for Datadog's SDK. This is not an official package.
Setup #
- Generate a client token from Datadog through the Settings > API panel (under Client Tokens). If you're using RUM, do not toggle between the RUM platform client tokens.
- Initialize:
await DatadogFlutter.initialize( clientToken: myDatadogClientToken, serviceName: 'my-app-name', environment: 'production', )
- Associate RUM and log events (optional):
await DatadogFlutter.setUserInfo(id: <YOUR_USER_ID>);
- Acknowledge
TrackingConsent
at initialization or later within your application. Events will not be logged untiltrackingConsent
is.granted
. This value can be updated viaDatadogFlutter.updateTrackingConsent
.
⚠️ Your Podfile must have use_frameworks!
(Flutter includes this by default) and your minimum iOS target must be >= 11. This is a requirement from the Datadog SDK.
Flutter Web Caveats #
The Datadog scripts need to be inserted in your index.html
document. Please add both the logging script and the RUM script to their own <script>
tags. DO NOT add the .init
on .onReady
code.
Logging #
In its default implementation, log data will only be transmitted to Datadog through Logger
records. print
statements are not guaranteed to be captured.
ddLogger = DatadogLogger(loggerName: 'orders');
// optionally set a value for HOST
// ddLogger.addAttribute('hostname', <DEVICE IDENTIFIER>);
ddLogger.addTag('restaurant_type', 'pizza');
ddLogger.removeTag('restaurant_type');
// add attribute to every log
ddLogger.addAttribute('toppings', 'extra_cheese');
// add atttributes to some logs
ddLogger.log('time to cook pizza', Level.FINE, attributes: {
'durationInMilliseconds': timer.elapsedMilliseconds,
});
Flutter Web Caveats #
addTag
andremoveTag
are not invoked and resolve silently when using Flutter web. This is a missing feature in Datadog's JS SDK.
Real User Monitoring #
RUM adds support for error, event, and screen tracking. The integration requires additional configuration for each service.
- Supply an application ID to
initialize
:await DatadogFlutter.initialize( clientToken: myDatadogClientToken, serviceName: 'my-app-name', environment: 'production', iosRumApplicationId: myiOSRumApplicationId, androidRumApplicationId: myAndroidRumApplicationId, webRumApplicationId: myWebRumApplicationId, )
- Automatically track screens:
MaterialApp( // ...your material config... home: HomeScreen(), navigatorObservers: [ DatadogObserver(), ], );
- Automatically report errors (on iOS deployments be sure to upload your dSYMs):
void main() async { // Capture Flutter errors automatically: FlutterError.onError = DatadogRum.instance.addFlutterError; // Catch errors without crashing the app: runZonedGuarded(() { runApp(MyApp()); }, (error, stackTrace) { DatadogRum.instance.addError(error, stackTrace); }); }
- Manually track additional events (please note that Android will only report
RUMAction.custom
events):GestureDetector(onTap: () { DatadogRum.instance.addUserAction('EventTapped'); })
- Manually track additional errors:
try { throw StateError(); } catch (e, st) { DatadogRum.instance.addError(e, st); }
- Manually track network requests or resources:
await DatadogRum.startResourceLoading( aUniqueIdentifier, url: 'https://example.com', method: RUMResources.get, ); await DatadogRum.stopResourceLoading( aUniqueIdentifier, statusCode: 500, errorMessage: 'Internal Server Error' , )
Flutter Web Caveats #
addUserAction
ignores theaction
when using Flutter web.updateTrackingConsent
is not invoked and fails silently when using Flutter web. This is a missing feature in Datadog's JS SDK.stopView
is not invoked and fails silently when using Flutter web. This is a missing feature in Datadog's JS SDK.startUserAction
andstopStopUserAction
are not invoked and fail silently when using Flutter web. This is a missing feature in Datadog's JS SDK.startResourceLoading
andstopResourceLoading
are not invoked and resolve silently when using Flutter web. This is a missing feature in Datadog's JS SDK.setUserInfo
does not support custom attributes when using Flutter web. This is due to Dart's method of strongly typing JS. Onlyname
,id
, andemail
are supported.
Tracing #
Associate your HTTP requests with your backend service. Be sure to setup (usually immediately after DatadogFlutter.initialize
):
await DatadogTracing.initialize();
For one-off requests, instantiate a fresh client:
final httpClient = DatadogTracingHttpClient();
// make requests
final response = await httpClient.get(Uri(string: 'http://example.com');
For frameworks that use an internal client like Brick, compose the client:
RestProvider(
client: DatadogTracingHttpClient();
)
// or compose if another client is already being used:
RestProvider(
client: DatadogTracingHttpClient(GZipHttpClient());
)
FAQ #
How do I disable logging when I'm developing locally? #
By default, the DatadogFlutter
default constructor will send all logs from Logger
to Datadog. To ignore, set bindOnRecord
:
DatadogLogger(bindOnRecord: false)
And log conditionally later:
Logger.root.onRecord.listen((record) async {
if (shouldSendToDatadog) {
ddLogger.onRecordCallback(record)
} else {
print(record);
}
});