Flutter日志管理插件minlog的使用

Flutter日志管理插件minlog的使用

Minlog

minlog 是一个受 Rust 的 env_logger 启发的 Dart/Flutter 日志管理包。


安装

在 Flutter 项目中添加 minlog 插件:

flutter pub add minlog

dart pub add minlog

使用

minlog 的核心类是 Logger。实例化后,可以通过该类记录日志信息。

示例代码

import 'package:minlog/minlog.dart';

void main() {
  // 创建一个日志实例,设置日志级别为 Level.warn,并将日志写入到标准错误流(stderr)
  final logger = Logger(level: Level.warn, writer: StdErrWriter());

  // 输出一条 info 级别的日志,由于当前日志级别为 Level.warn,这条日志不会被打印
  logger.info("Info message");

  // 输出一条 error 级别的日志,这条日志会打印出来
  logger.error("Unexpected crash", {
    "error": "reason of crash", // 错误原因
    "time": DateTime.now().toString(), // 当前时间
  });
}

运行上述代码时,你会看到类似以下输出:

[ERROR] Unexpected crash: {"error":"reason of crash","time":"2023-10-01 12:00:00.000"}

日志输出目标

minlog 提供了多种日志输出方式,通过不同的 Writer 实现。

示例代码

import 'package:minlog/minlog.dart';
import 'dart:io';

void main() {
  // 日志写入到标准输出流(stdout)
  final stdoutw = StdOutWriter();
  // 日志写入到标准错误流(stderr)
  final stderrw = StdErrWriter();
  // 日志写入到文件
  final filew = FileWriter(File("path/to/file.txt"));

  // 创建一个日志实例,日志写入到多个地方
  final multiWriter = MultiWriter([stdoutw, stderrw, filew]);
  final logger = Logger(level: Level.info, writer: multiWriter);

  logger.info("This log will go to all three writers.");
}

运行上述代码后,日志信息会被同时输出到控制台和指定的日志文件中。


默认日志功能

minlog 提供了一些全局的日志函数,无需手动创建 Logger 实例即可直接记录日志。

示例代码

import 'package:minlog/minlog.dart';

void main() {
  // 设置默认日志级别为 Level.info,并将日志写入到标准错误流(stderr)
  updateDefaultLogger(Logger(level: Level.info, writer: StdErrWriter()));

  // 使用全局日志函数记录日志
  log(Level.info, "Global Info message");
  error("Unexpected crash", {
    "error": "reason of crash",
    "time": DateTime.now().toString(),
  });
}

运行上述代码时,你会看到类似以下输出:

[ERROR] Unexpected crash: {"error":"reason of crash","time":"2023-10-01 12:00:00.000"}

自定义日志格式

可以自定义日志的输出格式,只需传递一个格式化函数给 Logger

示例代码

import 'package:minlog/minlog.dart';

void main() {
  // 自定义日志格式
  final customFormatter = (level, message, metadata) {
    return "[${DateTime.now()}] [$level] $message";
  };

  final logger = Logger(
    level: Level.info,
    writer: StdErrWriter(),
    formatter: customFormatter,
  );

  logger.info("Custom formatted info message");
}

运行上述代码时,你会看到类似以下输出:

[2023-10-01 12:00:00.000] [INFO] Custom formatted info message

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

1 回复

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


minlog 是一个轻量级的日志管理插件,适用于 Flutter 应用。它提供了简单易用的 API 来记录和管理日志信息。以下是如何在 Flutter 项目中使用 minlog 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  minlog: ^1.0.0  # 请检查最新版本

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

2. 初始化 minlog

在你的 main.dart 文件中,初始化 minlog

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

void main() {
  // 初始化 MinLog
  MinLog.init();

  runApp(MyApp());
}

3. 使用 minlog 记录日志

你可以在应用的任何地方使用 MinLog 来记录日志。minlog 提供了不同级别的日志记录方法:

  • MinLog.v(String message) - 详细日志 (Verbose)
  • MinLog.d(String message) - 调试日志 (Debug)
  • MinLog.i(String message) - 信息日志 (Info)
  • MinLog.w(String message) - 警告日志 (Warn)
  • MinLog.e(String message) - 错误日志 (Error)
  • MinLog.wtf(String message) - 严重错误日志 (What a Terrible Failure)

例如:

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    MinLog.v("这是一个详细日志");
    MinLog.d("这是一个调试日志");
    MinLog.i("这是一个信息日志");
    MinLog.w("这是一个警告日志");
    MinLog.e("这是一个错误日志");
    MinLog.wtf("这是一个严重错误日志");

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

4. 配置日志输出

minlog 默认会将日志输出到控制台。你可以通过配置来控制日志的输出行为,例如设置日志级别、自定义日志输出格式等。

例如,设置日志级别为 LogLevel.INFO,只记录 INFO 及以上级别的日志:

void main() {
  // 初始化 MinLog 并设置日志级别为 INFO
  MinLog.init(logLevel: LogLevel.INFO);

  runApp(MyApp());
}

5. 自定义日志输出

你还可以通过实现 LogPrinter 接口来自定义日志的输出格式。例如:

class CustomLogPrinter extends LogPrinter {
  [@override](/user/override)
  void print(LogLevel level, String message) {
    // 自定义日志输出格式
    final dateTime = DateTime.now();
    print('[$dateTime] [$level] $message');
  }
}

void main() {
  // 初始化 MinLog 并使用自定义的日志打印机
  MinLog.init(logPrinter: CustomLogPrinter());

  runApp(MyApp());
}

6. 日志文件输出

如果你希望将日志输出到文件中,可以结合 dart:iominlog 来实现。例如:

import 'dart:io';

class FileLogPrinter extends LogPrinter {
  final File file;

  FileLogPrinter(this.file);

  [@override](/user/override)
  void print(LogLevel level, String message) {
    final dateTime = DateTime.now();
    final logEntry = '[$dateTime] [$level] $message\n';
    file.writeAsStringSync(logEntry, mode: FileMode.append);
  }
}

void main() async {
  final logFile = File('log.txt');
  MinLog.init(logPrinter: FileLogPrinter(logFile));

  runApp(MyApp());
}
回到顶部