Trace Configuration¶
| Field | Type | Required | Description |
|---|---|---|---|
| sampleRate | double | No | Sampling rate, value range [0,1], 0 means no collection, 1 means full collection, default value is 1 |
| traceType | enum TraceType | No | Trace type, default TraceType.ddTrace, supports ddTrace, zipkinMulti, zipkinSingle, traceparent, skywalking, jaeger |
| enableLinkRUMData | bool | No | Whether to link with RUM data, default false |
| enableAutoTrace | bool | No | Whether to automatically add Trace Header in http requests, default false. Implemented by modifying HttpOverrides.global. If the project has customization needs, it must inherit FTHttpOverrides |
| enableNativeAutoTrace | bool | No | Whether to enable native network auto-tracing, iOS NSURLSession, Android OKHttp, default false |
Tracer Network Trace¶
Automatic Collection¶
Enabled by setting enableAutoTrace via FTTracer().setConfig.
Custom Tracer¶
Usage¶
/// Get trace http request header data
/// [key] Unique id
/// [url] Request URL
Future<Map<String, String>> getTraceHeader(String url, {String? key})
Code Example¶
void httpClientGetHttp() async {
var url = 'http://reqeust.url.cn';
var httpClient = HttpClient();
String key = DateTime.now().millisecondsSinceEpoch.toString() + url;
var errorMessage = "";
HttpClientRequest request = await httpClient.getUrl(Uri.parse(url));
HttpClientResponse? response;
try {
final traceHeaders =
await FTTracer().getTraceHeader(key, request.uri.toString());
traceHeaders.forEach((key, value) {
request.headers.add(key, value);
});
response = await request.close();
} catch (exception) {
errorMessage = exception.toString();
} finally {
Map<String, dynamic> requestHeader = {};
Map<String, dynamic> responseHeader = {};
request.headers.forEach((name, values) {
requestHeader[name] = values;
});
if (response != null) {
response.headers.forEach((name, values) {
responseHeader[name] = values;
});
}
}
}
For using the
httplibrary anddiolibrary, refer to example.