Flutter网络请求日志记录插件dart_frog_request_logger的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter网络请求日志记录插件dart_frog_request_logger的使用 🪵

dart_frog_request_logger 是一个用于 Dart Frog 的中间件,旨在帮助开发者记录和管理网络请求的日志。该插件支持多种日志格式,并且可以与 Google Cloud Logging 集成。

特性 ✨

快速开始 🚀

以下是一个简化的示例,完整示例请访问 GitHub 示例

设置 🏗️

在你的顶级 _middleware.dart 文件中添加 RequestLogger 中间件:

import 'package:dart_frog/dart_frog.dart';
import 'package:dart_frog_request_logger/dart_frog_request_logger.dart';
import 'package:request_logger/log_formatters.dart';

Handler middleware(Handler handler) {
  return handler.use(
    provider<RequestLogger>(
      (context) => RequestLogger(
        headers: context.request.headers,
        logFormatter: formatSimpleLog(),
      ),
    ),
  );
}

记录日志 📝

RequestContext 中读取 RequestLogger 并记录日志:

import 'package:dart_frog/dart_frog.dart';
import 'package:dart_frog_request_logger/dart_frog_request_logger.dart';

Response onRequest(RequestContext context) {
  final logger = context.read<RequestLogger>();
  logger.debug('Hello Logs');
  return Response();
}

使用不同的日志格式

你可以通过提供不同的 LogFormatter 来改变日志格式。你可以选择内置格式或自定义格式。

内置格式

所有内置的日志格式都在 package:request_logger/log_formatters.dart 中。

目前提供的内置格式有:

  • formatSimpleLog(): 简单格式化日志,适合本地开发。
  • formatCloudLoggingLog(): 格式化日志以兼容 Google Cloud Logging

自定义格式

你也可以创建自己的格式器:

LogFormatter formatMyCustomLog() => ({
      required Severity severity,
      required String message,
      required Request request,
      Map<String, dynamic>? payload,
      Map<String, dynamic>? labels,
      bool? isError,
      Chain? chain,
      Frame? stackFrame,
    }) {
      return 'My custom log: $message';
    };

完整示例 Demo

以下是一个完整的示例应用程序,展示如何使用 RequestLogger

// _middleware.dart
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_frog_request_logger/dart_frog_request_logger.dart';
import 'package:request_logger/log_formatters.dart';

Handler middleware(Handler handler) {
  return handler.use(
    provider<RequestLogger>(
      (context) => RequestLogger(
        headers: context.request.headers,
        logFormatter: formatSimpleLog(),
      ),
    ),
  );
}

// main.dart
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_frog_request_logger/dart_frog_request_logger.dart';

Future<Response> onRequest(RequestContext context) async {
  final logger = context.read<RequestLogger>();
  
  // 记录一条调试信息
  logger.debug('This is a debug message.');
  
  // 记录一条错误信息
  try {
    throw Exception('An error occurred!');
  } catch (e, stackTrace) {
    logger.error('Error occurred', error: e, stackTrace: stackTrace);
  }

  return Response(body: 'Check your logs!');
}

通过上述步骤,你可以在 Dart Frog 应用程序中轻松集成并使用 dart_frog_request_logger 插件来记录和管理网络请求日志。


这个 Markdown 文档详细介绍了如何在 Dart Frog 项目中使用 `dart_frog_request_logger` 插件,并提供了完整的示例代码以供参考。

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用dart_frog_request_logger插件来进行网络请求日志记录的示例代码。

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

dependencies:
  flutter:
    sdk: flutter
  dart_frog_request_logger: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,你需要配置dart_frog_request_logger。假设你使用的是dio库进行网络请求,你可以按照以下步骤进行配置:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:dart_frog_request_logger/dart_frog_request_logger.dart';
  1. 配置dio实例和请求日志记录器
void main() {
  // 创建dio实例
  final Dio dio = Dio();

  // 创建请求日志记录器实例
  final RequestLogger logger = RequestLogger(
    level: RequestLogLevel.body, // 设置日志级别,可以是 RequestLogLevel.body, RequestLogLevel.header, RequestLogLevel.all 或 RequestLogLevel.none
    enableFileLogger: true, // 是否启用文件日志记录
    filePath: './dio_logs', // 日志文件存储路径
    maxLogFileSize: 1024 * 1024, // 单个日志文件最大大小(字节)
    maxLogFilesCount: 5, // 保留的最大日志文件数量
  );

  // 将请求日志记录器中间件添加到dio实例
  dio.interceptors.add(LogInterceptor(
    requestLogger: (options, handler) {
      logger.logRequest(options);
      return handler.next(options);
    },
    responseLogger: (response, handler) {
      logger.logResponse(response);
      return handler.next(response);
    },
    errorLogger: (error, stackTrace, handler) {
      logger.logError(error, stackTrace);
      return handler.next(error);
    },
  ));

  runApp(MyApp(dio: dio));
}

class MyApp extends StatelessWidget {
  final Dio dio;

  MyApp({required this.dio});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Network Request Logger')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                Response response = await dio.get('https://jsonplaceholder.typicode.com/posts/1');
                print('Response Data: ${response.data}');
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text('Fetch Data'),
          ),
        ),
      ),
    );
  }
}

在上面的代码中,我们完成了以下步骤:

  1. 创建了一个Dio实例用于网络请求。
  2. 创建了一个RequestLogger实例,并配置了日志级别、文件日志记录等参数。
  3. LogInterceptor添加到dio实例的拦截器链中,并在拦截器中调用RequestLogger的方法来记录请求、响应和错误信息。
  4. MyApp组件中创建了一个简单的按钮,点击按钮时会发起一个GET请求,并打印响应数据或错误信息。

现在,当你运行应用程序并点击按钮发起网络请求时,dart_frog_request_logger将会记录请求和响应的详细信息,并根据配置保存到文件中。

请确保在实际应用中根据需求调整日志级别和文件路径等参数。

回到顶部