Flutter日志管理插件dooadex_logger的使用

dooadex_logger #

特性

  • 支持多种类型的日志记录(默认、警告、信息、调试等)
  • 可以记录HTTP请求和响应
  • 提供了一些有趣的日志打印方法(如心跳、大便等)

开始使用

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

dependencies:
  dooadex_logger: ^x.x.x

然后运行flutter pub get来获取该包。

使用

以下是一个简单的示例,展示了如何使用dooadex_logger插件来记录不同类型的日志。

示例代码

import 'package:dooadex_logger/dooadex_logger.dart';
import 'package:dooadex_palette/dooadex_palette.dart';

// ignore: depend_on_referenced_packages
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Dooadex Package Test App',
      theme: ThemeData(
        primarySwatch:
            MaterialColor(DooadexColor.primaryMaterialColor.colorHex, DooadexColor.primaryMaterialColor.swatch),
      ),
      home: const MyHomePage(title: 'Dooadex Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Uri _generateUri() {
    return Uri(scheme: "https", host: "api.agify.io", path: null, queryParameters: null, query: "name=dhkim");
  }

  Future<http.Response> _httpRequest({required http.Request request}) async {
    final streamedResponse = await request.send();
    return await http.Response.fromStream(streamedResponse);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 默认日志
            DdxLogger("Default Logger");
            // 记录对象
            DdxLogger("You can use this for even Object ${_TestObjectPrint()}");
            // 警告日志
            DdxLogger.warning("Warning");
            // 信息日志
            DdxLogger.info("Info");
            // 调试日志
            DdxLogger.debug("Debugging");
            // 多行日志
            DdxLogger.log("log1\nlog2\nlog3\nlog4\nlog5");
            // 构建日志
            DdxLogger.build("build start\nbuilding...\nbuilding...\nbuilding...\nbuild done");
            // 有趣的心跳日志
            DdxFunLogger.heart("I Love You.");
            // 有趣的便便日志
            DdxFunLogger.poop("Shit Code");

            // 异常日志
            DdxLogger.exception(_DdxException("Exception Message"));
            // 错误日志
            DdxLogger.error(DdxError.example());

            http.Request request = http.Request("GET", _generateUri());
            request.headers.addAll({'Content-Type': 'application/json'});

            // HTTP请求日志
            DdxLogger.httpRequest(httpRequest: request);
            http.Response response = await _httpRequest(request: request);
            // HTTP响应日志
            DdxLogger.httpResponse(httpResponse: response);
            // 打印HTTP响应头的日志
            DdxLogger.httpResponse(httpResponse: response, printHeaders: true);
          },
          child: const Text("Test"),
        ),
      ),
    );
  }
}

class _TestObjectPrint {
  final String str = "Instance";
  final int integer = 3;
}

class _DdxException implements Exception {
  _DdxException(this.message);

  final String? message;

  @override
  String toString() {
    return "DooadexException: $message";
  }
}

class DdxError implements Error {
  final String? type;
  final String? message;
  final String? title;
  final String? detail;

  DdxError({this.type, this.message, this.title, this.detail});

  @override
  String toString() {
    return "$type\n$message\n$title\n$detail";
  }

  @override
  StackTrace? get stackTrace => throw UnimplementedError();

  factory DdxError.example({String? type, String? message, String? title, String? detail}) = _Example;
}

class _Example extends DdxError {
  _Example({String? type, String? message, String? title, String? detail})
      : super(
            type: type ?? "TEST_ERROR",
            message: message ?? 'Error occurred',
            title: title ?? 'Error Title',
            detail: detail ?? 'Error Message');
}

以上代码展示了如何在Flutter应用中使用dooadex_logger插件来记录各种类型的日志。通过这些示例,你可以更好地理解和使用该插件的功能。


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

1 回复

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


dooadex_logger 是一个用于 Flutter 的日志管理插件,它可以帮助开发者更方便地记录和管理应用程序中的日志信息。以下是如何使用 dooadex_logger 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  dooadex_logger: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化日志器

在你的应用程序启动时,初始化 dooadex_logger。通常,你可以在 main.dart 文件中进行初始化:

import 'package:dooadex_logger/dooadex_logger.dart';

void main() {
  // 初始化日志器
  Logger.init(
    level: Level.verbose,  // 设置日志级别
    enableConsoleOutput: true,  // 是否在控制台输出日志
    enableFileOutput: true,  // 是否将日志写入文件
    filePath: "logs/app.log",  // 日志文件路径
  );

  runApp(MyApp());
}

3. 记录日志

在应用程序的代码中,你可以使用 Logger 来记录不同级别的日志信息:

import 'package:dooadex_logger/dooadex_logger.dart';

void someFunction() {
  Logger.v("Verbose log");  // 详细日志
  Logger.d("Debug log");    // 调试日志
  Logger.i("Info log");     // 信息日志
  Logger.w("Warning log");  // 警告日志
  Logger.e("Error log");    // 错误日志
  Logger.wtf("WTF log");    // 严重错误日志
}

4. 日志级别

dooadex_logger 支持多种日志级别,你可以根据需要设置日志的显示级别。以下是一些常见的日志级别:

  • Level.verbose: 详细日志,通常用于调试和跟踪。
  • Level.debug: 调试日志,用于开发过程中的调试信息。
  • Level.info: 信息日志,用于记录应用程序的正常运行状态。
  • Level.warning: 警告日志,用于记录潜在的问题。
  • Level.error: 错误日志,用于记录错误信息。
  • Level.wtf: 严重错误日志,用于记录非常严重的错误。

5. 日志文件管理

如果你启用了文件输出 (enableFileOutput: true),日志将被写入指定的文件中。你可以通过 filePath 参数指定日志文件的路径。

Logger.init(
  level: Level.verbose,
  enableConsoleOutput: true,
  enableFileOutput: true,
  filePath: "logs/app.log",  // 自定义日志文件路径
);

6. 日志格式化

dooadex_logger 允许你自定义日志的格式。你可以通过 Logger.initformatter 参数来设置日志的格式化方式。

Logger.init(
  level: Level.verbose,
  enableConsoleOutput: true,
  enableFileOutput: true,
  filePath: "logs/app.log",
  formatter: (level, message) => "[${DateTime.now()}] $level: $message",  // 自定义日志格式
);

7. 日志文件轮转

为了管理日志文件的大小,你还可以启用日志文件轮转功能。通过 Logger.initmaxFileSizemaxFiles 参数来配置日志文件的最大大小和保留的文件数量。

Logger.init(
  level: Level.verbose,
  enableConsoleOutput: true,
  enableFileOutput: true,
  filePath: "logs/app.log",
  maxFileSize: 1024 * 1024,  // 每个日志文件最大为 1MB
  maxFiles: 5,  // 最多保留 5 个日志文件
);

8. 清除日志文件

如果你需要手动清除日志文件,可以使用 Logger.clearLogs() 方法:

Logger.clearLogs();

9. 获取日志内容

你可以通过 Logger.getLogs() 方法获取日志文件的内容:

String logs = await Logger.getLogs();
print(logs);

10. 关闭日志器

在应用程序退出时,可以调用 Logger.close() 来关闭日志器并释放资源:

Logger.close();
回到顶部