跳转至

Trace 配置

await FTTracer().setConfig(
  enableLinkRUMData: true,
  enableAutoTrace: true,
);
字段 类型 必须 说明
sampleRate double 否 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1
traceType enum TraceType 否 链路类型,默认 TraceType.ddTrace,支持 ddTrace、zipkinMulti、zipkinSingle、traceparent、skywalking、jaeger
enableLinkRUMData bool 否 是否与 RUM 数据关联,默认 false
enableAutoTrace bool 否 是否在 http 请求中自动添加 Trace Header,默认 false。通过修改 HttpOverrides.global 实现,如果项目有定制需求需要继承 FTHttpOverrides
enableNativeAutoTrace bool 否 是否开启原生网络自动追踪,iOS NSURLSession、Android OKHttp,默认 false

Tracer 网络链路追踪

自动采集

通过 FTTracer().setConfig 开启 enableAutoTrace 来实现。

自定义 Tracer

使用方法

/// 获取 trace http 请求头数据
/// [key] 唯一 id
/// [url] 请求地址
Future<Map<String, String>> getTraceHeader(String url, {String? key})

代码示例

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;
      });
    }
  }
}

使用 http 库与 dio 库,可参考 example。

文档评价

文档内容是否对您有帮助?