Flutter日志管理插件slog_core的使用

Flutter日志管理插件slog_core的使用

SLog Core

本包是一个核心包,但其中包含一个基础的日志记录器。你不需要使用它,可以创建自己的日志记录器,这是拥有核心包的目的。

特性

  • 基础日志记录器
  • 打印器
  • 拦截器
  • 通道
  • 日志隔离

安装

直接添加

pubspec.yaml 文件中添加 slog_core

dependencies:
  slog_core:

安装它:

dart pub get
flutter pub get

从终端安装

dart pub add slog_core
flutter pub add slog_core

基础日志记录器

基础日志记录器是全局可用的,并使用单例模式。你可以创建非单例实例,只需调用 Logger 的构造函数。

import 'package:slog_core/logger.dart';

main() {
  // 你可以初始化基础日志记录器(可选)
  // 默认情况下,它已经初始化且没有任何选项。
  // 推荐在初始化时至少指定一个打印器,因为默认情况下没有打印器。
  Logger.init();
  // 或者
  Logger.init(
    options: SLogOptions(
      printers: [
        SomePrinter(), // 这不是真实的打印器,请查看 slog_basic 包中的预定义打印器
      ],
    ),
  );

  Logger.I.log('Hello world');
  // 或者
  Logger.instance.log('Hello world');
}

注意事项

错误处理

如果日志记录器、打印器或拦截器抛出错误,SLogger 将尝试不将它们传播到主线程。

例如,如果 jsonEncodejsonDecode 在打印器内部抛出错误,日志记录器将捕获该错误并将其记录到 Dart 日志中。

日志记录器

由于此包旨在支持自定义,你可以添加自己的 Level,通过扩展 SLogger 创建新的日志记录器。建议你创建自己的拦截器和打印器,因为我们无法猜测你的用例。

动机

我知道有很多日志库。我并不是说我的更好,而是说我想要的功能在这些日志库中都有,比如支持多个打印器和允许拦截器,就像 diochopper 那样。为什么这些功能只能用于 HTTP 客户端?

待办事项

  • ✓ 拦截器:参见 slog_basic
  • ✓ 打印器:参见 slog_basic
  • 滤镜
  • Flutter UI 包
  • 本地服务器包

示例代码

以下是一个完整的示例代码,展示了如何使用 slog_core 插件。

import 'dart:async';
import 'dart:isolate';

import 'package:slog_core/logger.dart';

Future<void> main(List<String> args) async {
  // 初始化全局日志记录器实例
  Logger.init(
    options: SLogOptions(
      printers: [
        IsolatePrinter(),
      ],
    ),
  );

  Logger.I.log("I'm not in an isolate");

  // 初始化并等待隔离
  await Logger.I.initIsolate();

  int count = 0;
  Timer.periodic(const Duration(seconds: 1), (timer) async {
    Logger.I.log('Hello from an isolate');
    if (count < 5) {
      count++;
    } else {
      timer.cancel();

      // 使用完毕后关闭隔离
      await Logger.I.closeIsolate();
      Logger.I.log("I'm also not in an isolate");
    }
  });

  // 隔离是一个不同的线程,所以这将会发送到隔离中
  Logger.I.log("I'm in an isolate");
}

class IsolatePrinter extends SLogPrinter {
  [@override](/user/override)
  FutureOr<void> printLog(LogRequest request) {
    // 忽略:避免打印
    print(
      '${request.event.log.timestamp} '
      '[${Isolate.current.debugName}] -&gt; '
      '${request.event.log.message}',
    );
  }
}

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

1 回复

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


slog_core 是一个用于 Flutter 应用的日志管理插件,它可以帮助开发者更方便地记录和管理日志信息。以下是 slog_core 的基本使用方法:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 slog_core 依赖:

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

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

2. 初始化日志管理器

在你的应用的 main.dart 文件中初始化 slog_core

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

void main() {
  // 初始化日志管理器
  Slog.initialize(
    logLevel: LogLevel.verbose,  // 设置日志级别
    printLogs: true,             // 是否打印日志到控制台
    saveLogs: true,              // 是否保存日志到文件
  );

  runApp(MyApp());
}

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

3. 记录日志

在你的应用中使用 Slog 来记录日志:

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                // 记录不同级别的日志
                Slog.v('This is a verbose log.');  // 详细日志
                Slog.d('This is a debug log.');    // 调试日志
                Slog.i('This is an info log.');    // 信息日志
                Slog.w('This is a warning log.');  // 警告日志
                Slog.e('This is an error log.');   // 错误日志
              },
              child: Text('Log Messages'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 日志级别

slog_core 支持以下日志级别:

  • LogLevel.verbose: 详细日志,用于记录最详细的日志信息。
  • LogLevel.debug: 调试日志,用于调试信息。
  • LogLevel.info: 信息日志,用于记录应用运行的关键信息。
  • LogLevel.warning: 警告日志,用于记录潜在的异常情况。
  • LogLevel.error: 错误日志,用于记录错误信息。

你可以通过 Slog.initializelogLevel 参数来设置日志级别,只有等于或高于该级别的日志才会被记录。

5. 保存日志

如果你希望在设备上保存日志,可以在 Slog.initialize 中设置 saveLogstrue。日志文件会保存在应用的缓存目录中。

你可以通过以下方式获取日志文件路径:

String logFilePath = await Slog.getLogFilePath();

6. 自定义日志格式

slog_core 允许你自定义日志的格式。你可以通过 Slog.initializeformatter 参数来设置自定义的日志格式器。

例如:

Slog.initialize(
  logLevel: LogLevel.verbose,
  printLogs: true,
  saveLogs: true,
  formatter: (LogLevel level, String message, StackTrace? stackTrace) {
    return '[${DateTime.now()}] [${level.name}] $message';
  },
);

7. 日志上传

如果你需要将日志上传到服务器或其他远程存储,可以在 Slog.initialize 中设置 uploader 参数。

例如:

Slog.initialize(
  logLevel: LogLevel.verbose,
  printLogs: true,
  saveLogs: true,
  uploader: (String logFilePath) async {
    // 实现日志上传逻辑
  },
);

8. 清除日志

你可以通过以下方式清除保存的日志文件:

await Slog.clearLogs();
回到顶部