Flutter网络请求拦截插件dio_interceptor_seq的使用

Flutter网络请求拦截插件dio_interceptor_seq的使用

安装

在你的 pubspec.yaml 文件中添加依赖:

dependencies:
  dio_seq_logging_interceptor: ^1.0.0

然后运行 flutter pub get 来安装该包。

使用

要开始使用 SeqLoggingInterceptor,请按照以下步骤操作:

  1. 在配置 DIO 客户端的文件中导入包:
import 'package:dio_seq_logging_interceptor/dio_seq_logging_interceptor.dart';
  1. 创建一个 SeqLoggingInterceptor 实例,并提供 Seq 服务器的 URL 和可选的 API 密钥:
final seqLoggingInterceptor = SeqLoggingInterceptor(
  'https://your-seq-server-url',
  apiKey: 'your-seq-api-key',
);
  1. 将拦截器添加到你的 DIO 客户端实例中:
final dio = Dio();
dio.interceptors.add(seqLoggingInterceptor);

现在,所有通过 DIO 客户端处理的请求、响应和错误都将被记录到 Seq 中。

配置

你可以在创建 SeqLoggingInterceptor 实例时自定义用于关联 ID 的头名称。默认情况下,头名称为 'X-Request-Seq-Id'

final seqLoggingInterceptor = SeqLoggingInterceptor(
  'https://your-seq-server-url',
  apiKey: 'your-seq-api-key',
  correlationalHeaderName: 'X-Custom-Correlation-ID',
);

示例日志

seq-screenshot

运行 Seq 使用 Docker

要使用 Docker 运行一个 Seq 容器,请按照以下步骤操作:

  1. 如果还没有安装 Docker,请先安装 Docker。
  2. 从 Docker Hub 拉取最新的 Seq 镜像:
docker pull datalust/seq
  1. 创建一个新的目录来存储 Seq 数据:
mkdir seq_data
  1. 运行一个 Seq 容器,将创建的数据目录映射到容器的 /data 文件夹,并转发默认的 Seq 端口(5341):
PH=$(echo '<password>' | docker run --rm -i datalust/seq config hash)
mkdir -p <local path to store data>
docker run \
--name seq \
-d \
--restart unless-stopped \
-e ACCEPT_EULA=Y \
-e SEQ_FIRSTRUN_ADMINPASSWORDHASH="$PH" \
-v <local path to store data>:/data \
-p 80:80 \
-p 5341:5341 \
datalust/seq

这条命令将以分离模式(-d)运行 Seq 容器,使用自定义名称(–name seq),将本地 seq_data 目录映射到容器的 /data 文件夹(-v),并将主机的端口 5341 转发到容器的端口 80(-p)。

  1. 打开你的浏览器并导航到 http://localhost:5341。你应该能看到 Seq 网页界面。 你可以使用在 Docker 容器中运行的 Seq 实例来收集和分析你的日志。在配置你的 SeqLoggingInterceptor 时,使用 Seq URL http://localhost:5341 来将日志发送到这个实例。

更多关于使用 Docker 运行 Seq 的信息,请参阅 官方 Seq 文档

示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用中使用 SeqLoggingInterceptor

import 'package:example/app/app.dart';
import 'package:flutter/material.dart';
import 'package:dio_seq_logging_interceptor/dio_seq_logging_interceptor.dart';
import 'package:dio/dio.dart';

void main() {
  // 创建 SeqLoggingInterceptor 实例
  final seqLoggingInterceptor = SeqLoggingInterceptor(
    'https://your-seq-server-url',
    apiKey: 'your-seq-api-key',
  );

  // 创建 DIO 客户端实例并添加拦截器
  final dio = Dio();
  dio.interceptors.add(seqLoggingInterceptor);

  // 运行应用
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: AppPage(),
    );
  }
}

更多关于Flutter网络请求拦截插件dio_interceptor_seq的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络请求拦截插件dio_interceptor_seq的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dio_interceptor_seq 是一个用于 Flutter 的 Dio 网络请求拦截器插件,它可以帮助你按顺序执行多个拦截器。这对于需要在请求发送前或响应返回后执行一系列操作的场景非常有用。

安装

首先,你需要在 pubspec.yaml 文件中添加 dio_interceptor_seq 依赖:

dependencies:
  dio: ^4.0.0
  dio_interceptor_seq: ^0.1.0

然后运行 flutter pub get 来安装依赖。

使用示例

下面是一个简单的示例,展示如何使用 dio_interceptor_seq 来添加多个拦截器并按顺序执行它们。

import 'package:dio/dio.dart';
import 'package:dio_interceptor_seq/dio_interceptor_seq.dart';

void main() async {
  // 创建 Dio 实例
  final dio = Dio();

  // 创建拦截器序列
  final interceptorSequence = InterceptorSequence();

  // 添加第一个拦截器
  interceptorSequence.add(
    InterceptorsWrapper(
      onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
        print('Interceptor 1: Request');
        // 你可以在这里修改请求选项
        options.headers['Authorization'] = 'Bearer token';
        handler.next(options);
      },
      onResponse: (Response response, ResponseInterceptorHandler handler) {
        print('Interceptor 1: Response');
        handler.next(response);
      },
      onError: (DioError error, ErrorInterceptorHandler handler) {
        print('Interceptor 1: Error');
        handler.next(error);
      },
    ),
  );

  // 添加第二个拦截器
  interceptorSequence.add(
    InterceptorsWrapper(
      onRequest: (RequestOptions options, RequestInterceptorHandler handler) {
        print('Interceptor 2: Request');
        handler.next(options);
      },
      onResponse: (Response response, ResponseInterceptorHandler handler) {
        print('Interceptor 2: Response');
        handler.next(response);
      },
      onError: (DioError error, ErrorInterceptorHandler handler) {
        print('Interceptor 2: Error');
        handler.next(error);
      },
    ),
  );

  // 将拦截器序列添加到 Dio 实例中
  dio.interceptors.add(interceptorSequence);

  // 发送请求
  try {
    final response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
    print('Response data: ${response.data}');
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部