跳转至

Trace 配置

await FTTracer().setConfig(
  enableLinkRUMData: true,
  enableAutoTrace: true,
);
字段 类型 必须 说明
sampleRate double 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1
traceType enum TraceType 链路类型,默认 TraceType.ddTrace,支持 ddTracezipkinMultizipkinSingletraceparentskywalkingjaeger
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

文档评价

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