Flutter日志记录插件logger_plus的使用

Flutter日志记录插件logger_plus的使用

logger_plus 是一个轻量级、易于使用且可扩展的日志记录插件,它可以打印出漂亮的日志。它受到Android平台上的 logger 插件启发。

如果您觉得这个包可能对您有用,请给仓库点个赞以支持项目。

开始使用

首先,创建一个 Logger 实例并开始记录日志:

var logger = Logger();

logger.d("Logger is working!");

除了字符串消息外,您还可以传递其他对象,例如 ListMapSet

输出

输出示例

日志级别

您可以使用不同的日志级别进行记录:

logger.v("Verbose log"); // 详细日志
logger.d("Debug log");  // 调试日志
logger.i("Info log");   // 信息日志
logger.w("Warning log"); // 警告日志
logger.e("Error log");  // 错误日志
logger.wtf("What a terrible failure log"); // 致命错误日志

要仅显示特定的日志级别,可以设置:

Logger.level = Level.warning; // 只显示警告及以上的日志

这将隐藏所有详细的、调试的和信息的日志事件。

选项

在创建日志记录器时,您可以传递一些选项:

var logger = Logger(
  filter: null, // 使用默认的 LogFilter(仅在调试模式下记录)
  printer: PrettyPrinter(), // 使用 PrettyPrinter 来格式化和打印日志
  output: null, // 使用默认的 LogOutput(发送到控制台)
);

如果您使用了 PrettyPrinter,则可以配置更多选项:

var logger = Logger(
  printer: PrettyPrinter(
    methodCount: 2, // 显示方法调用的数量
    errorMethodCount: 8, // 如果提供了堆栈跟踪,则显示的方法调用数量
    lineLength: 120, // 输出宽度
    colors: true, // 彩色日志
    printEmojis: true, // 打印每个日志消息的 emoji
    printTime: false // 每个日志是否包含时间戳
  ),
);

日志控制台

摇晃设备或从任何地方调用 LogConsole.open(context) 来显示设备上的控制台。

日志控制台

自动检测

使用 io 包可以自动检测 lineLengthcolors 参数。 假设您已经导入了 io 包(import 'dart:io' as io;),您可以使用 io.stdout.supportsAnsiEscapes 来自动检测 colors,使用 io.stdout.terminalColumns 来自动检测 lineLength

除非有充分的理由不导入 io(例如在Web上使用此库),否则建议这样做。

日志过滤器

LogFilter 决定哪些日志事件应该被显示,哪些不应该。

默认实现 (DevelopmentFilter) 在调试模式下显示所有日志(level >= Logger.level)。在发布模式下,所有日志都会被忽略。

您可以创建自己的 LogFilter,如下所示:

class MyFilter extends LogFilter {
  [@override](/user/override)
  bool shouldLog(LogEvent event) {
    return true;
  }
}

这将显示所有日志,即使在发布模式下也是如此。(不推荐这样做

日志打印机

LogPrinter 创建并格式化输出,然后将其发送到 LogOutput

您可以实现自己的 LogPrinter。这将给您最大的灵活性。

一个非常基础的打印机可能如下所示:

class MyPrinter extends LogPrinter {
  [@override](/user/override)
  List<String> log(LogEvent event) {
    return [event.message];
  }
}

如果您创建了一个有用的 LogPrinter,并且希望对其他人也有帮助,请考虑发起一个拉取请求。

颜色

请注意,所有IDE(如 VSCode、XCode、Android Studio、IntelliJ)都不支持终端输出中的ANSI转义序列。这些转义序列用于为输出着色。如果使用这样的IDE,请不要配置彩色输出。

然而,如果您使用的是JetBrains IDE(如Android Studio、IntelliJ等),您可以利用插件 Grep Console 和装饰器 <code>PrefixPrinter</code> 来实现在任何日志中使用颜色:

var logger = Logger(
  printer: PrefixPrinter(PrettyPrinter(colors: false))
);

日志输出

LogOutput 将日志行发送到所需的目的地。

默认实现 (ConsoleOutput) 将每行发送到系统控制台。

class ConsoleOutput extends LogOutput {
  [@override](/user/override)
  void output(OutputEvent event) {
    for (var line in event.lines) {
      print(line);
    }
  }
}

可能的未来 LogOutput 可以发送到文件、Firebase 或 Logcat。欢迎发起拉取请求。

logger_flutter 扩展

logger_plus 包是 logger 的一个扩展。您可以将其添加到任何Flutter应用中。只需摇晃设备即可显示控制台。

使用示例

以下是一个完整的示例,展示了如何在Flutter应用中使用 logger_plus

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  var logger = Logger();

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
    logger.e(_counter); // 记录错误日志
    logger.wtf("WTF"); // 记录致命错误日志
    logger.d("Debug"); // 记录调试日志
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return LogConsoleOnShake(
      debugOnly: false,
      dark: true,
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              const Text(
                'You have pushed the button this many times:',
              ),
              Text(
                '$_counter',
                style: Theme.of(context).textTheme.headline4,
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Increment',
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}

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

1 回复

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


logger_plus 是一个用于 Flutter 的日志记录插件,它提供了丰富的功能和灵活的配置选项,可以帮助开发者更方便地记录和管理应用程序的日志信息。以下是如何在 Flutter 项目中使用 logger_plus 插件的详细步骤。

1. 添加依赖

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

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

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

2. 导入包

在需要使用 logger_plus 的 Dart 文件中导入包:

import 'package:logger_plus/logger_plus.dart';

3. 创建 Logger 实例

你可以通过 LoggerPlus 类创建一个日志记录器实例:

final logger = LoggerPlus();

4. 记录日志

logger_plus 提供了不同级别的日志记录方法:

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

5. 自定义日志输出格式

你可以通过 LoggerPlusprinter 属性来自定义日志的输出格式。logger_plus 提供了 PrettyPrinterSimplePrinter 两种默认的打印机。

例如,使用 PrettyPrinter 来美化日志输出:

final logger = LoggerPlus(
  printer: PrettyPrinter(
    colors: true,  // 启用颜色
    printEmojis: true,  // 打印表情符号
    printTime: true,  // 打印时间
  ),
);

6. 过滤日志级别

你可以通过 level 属性来设置日志记录的最低级别,低于该级别的日志将不会被输出:

final logger = LoggerPlus(
  level: Level.info,  // 只记录 info 及以上级别的日志
);

7. 日志输出到文件

logger_plus 支持将日志输出到文件。你可以使用 FileOutput 类来实现这一功能:

final fileOutput = FileOutput('log.txt');
final logger = LoggerPlus(
  output: fileOutput,
);

logger.i('This log will be written to a file');

8. 日志输出到控制台和文件

你还可以将日志同时输出到控制台和文件:

final fileOutput = FileOutput('log.txt');
final logger = LoggerPlus(
  output: MultiOutput([
    ConsoleOutput(),
    fileOutput,
  ]),
);

logger.i('This log will be written to both console and file');

9. 日志输出到其他目标

logger_plus 还支持将日志输出到其他目标,例如网络请求、数据库等。你可以通过实现 LogOutput 接口来自定义日志输出目标。

10. 示例代码

以下是一个完整的示例代码,展示了如何使用 logger_plus

import 'package:logger_plus/logger_plus.dart';

void main() {
  final logger = LoggerPlus(
    printer: PrettyPrinter(
      colors: true,
      printEmojis: true,
      printTime: true,
    ),
    level: Level.debug,
  );

  logger.v('Verbose log');
  logger.d('Debug log');
  logger.i('Info log');
  logger.w('Warning log');
  logger.e('Error log');
  logger.wtf('WTF log');
}

11. 运行结果

运行上述代码后,你将在控制台中看到类似以下的输出:

💡 [2023-10-05 12:34:56.789] Verbose log
🐛 [2023-10-05 12:34:56.789] Debug log
ℹ️ [2023-10-05 12:34:56.789] Info log
⚠️ [2023-10-05 12:34:56.789] Warning log
🚨 [2023-10-05 12:34:56.789] Error log
🤯 [2023-10-05 12:34:56.789] WTF log
回到顶部