Flutter日志管理插件diox_log的使用

Flutter日志管理插件diox_log的使用

diox_log 是一个为 Dart 编程语言设计的 HTTP 检查器工具,主要用于调试 HTTP 请求。目前它实现了基于 dio 的 HTTP 捕获功能。当然,你可以通过自己实现 Interceptor 来替代 DiologInterceptor,以适配其他 HTTP 客户端。

添加依赖

首先,在你的 pubspec.yaml 文件中添加 diox_log 依赖:

dependencies:
  diox_log : ^3.0.2

在dio中设置拦截器

接下来,在你的 dio 实例中添加 DioLogInterceptor 拦截器:

import 'package:dio/dio.dart';
import 'package:diox_log/dio_log_interceptor.dart';

void initHttp() {
  var dio = Dio();
  dio.interceptors.add(DioLogInterceptor());
}

在主页面添加悬浮按钮

为了方便查看日志,可以在主页面添加一个悬浮按钮,点击后可以跳转到日志列表界面:

import 'package:flutter/material.dart';
import 'package:diox_log/diox_log.dart';

void showDebugBtn(BuildContext context, {Color btnColor = Colors.blue}) {
  // 显示悬浮按钮
}

void dismissDebugBtn() {
  // 取消悬浮按钮
}

bool debugBtnIsShow() {
  // 返回悬浮按钮展示状态
  return true; // 示例返回值
}

如果你希望在特定位置打开日志列表,可以使用 Navigator

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => HttpLogListWidget(),
  ),
);

其他可配置参数

你还可以配置一些其他的参数来调整日志管理的行为,例如设置最大日志条数,定义哪些请求应被视为错误,以及是否禁用日志打印等:

/// 设置记录日志的最大条数
LogPoolManager.getInstance().maxCount = 100;

/// 添加自定义的日志错误判断逻辑
LogPoolManager.getInstance().isError = (res) => res.resOptions == null;

/// 禁用日志打印
DioLogInterceptor.enablePrintLog = false;

截图

以下是 diox_log 的截图展示:

日志列表 日志请求 日志响应

gif演示

gif演示

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 diox_log 插件:

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:diox_log/dio_log_interceptor.dart';
import 'package:diox_log/http_log_list_widget.dart';

void main() {
  initHttp();
  runApp(MyApp());
}

void initHttp() {
  var dio = Dio();
  dio.interceptors.add(DioLogInterceptor());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Demo of diox_log',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Demo of diox_log'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  MyHomePage({required this.title});

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void _navigateToLogList() {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => HttpLogListWidget(),
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _navigateToLogList,
          child: Text('查看日志'),
        ),
      ),
    );
  }
}

更多关于Flutter日志管理插件diox_log的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日志管理插件diox_log的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


diox_log 是一个用于 Flutter 应用的日志管理插件,它基于 dio 网络库,提供了一个简单而强大的日志记录功能。dio 是一个强大的 Dart HTTP 客户端,而 diox_log 则是 dio 的一个日志拦截器,用于记录 HTTP 请求和响应的详细信息。

安装 diox_log

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

dependencies:
  dio: ^5.0.0
  diox_log: ^1.0.0

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

使用 diox_log

  1. 初始化 Dio 并添加 DioxLogInterceptor
import 'package:dio/dio.dart';
import 'package:diox_log/diox_log.dart';

void main() {
  Dio dio = Dio();
  
  // 添加 DioxLogInterceptor 到 Dio 实例中
  dio.interceptors.add(DioxLogInterceptor());
  
  // 发送一个 GET 请求
  dio.get('https://jsonplaceholder.typicode.com/posts/1').then((response) {
    print(response.data);
  }).catchError((error) {
    print(error);
  });
}
  1. 配置 DioxLogInterceptor

DioxLogInterceptor 提供了一些配置选项,可以根据需要进行自定义:

dio.interceptors.add(DioxLogInterceptor(
  request: true, // 是否记录请求日志,默认为 true
  requestHeader: true, // 是否记录请求头,默认为 true
  requestBody: true, // 是否记录请求体,默认为 true
  responseHeader: true, // 是否记录响应头,默认为 true
  responseBody: true, // 是否记录响应体,默认为 true
  error: true, // 是否记录错误日志,默认为 true
  logPrint: (Object object) {
    // 自定义日志输出方式
    print(object);
  },
));
  1. 日志输出示例

当你发送一个请求时,diox_log 会输出类似以下的日志:

*** Request ***
uri: https://jsonplaceholder.typicode.com/posts/1
method: GET
headers: {content-type: application/json; charset=utf-8}
data: null

*** Response ***
uri: https://jsonplaceholder.typicode.com/posts/1
statusCode: 200
headers: {content-type: application/json; charset=utf-8}
data: {
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

自定义日志输出

你可以通过 logPrint 参数来自定义日志的输出方式,例如将日志写入文件或发送到远程服务器。

dio.interceptors.add(DioxLogInterceptor(
  logPrint: (Object object) {
    // 将日志写入文件
    final file = File('log.txt');
    file.writeAsStringSync('$object\n', mode: FileMode.append);
  },
));
回到顶部