Flutter日志记录插件logger_fork的使用

Flutter日志记录插件logger_fork的使用

pub package Last Commits Pull Requests Code size License

这是一个用于支持Flutter版本的logger_fork插件的fork版本

这是一个小巧、易于使用且可扩展的日志记录器,可以打印美观的日志。该插件受到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;

这将隐藏所有verbosedebuginfo级别的日志事件。

选项

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

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 // 每个日志是否包含时间戳
  ),
);

自动检测

通过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
  bool shouldLog(LogEvent event) {
    return true;
  }
}

这将显示所有日志,即使在发布模式下。(这不是一个好的做法

日志打印机

LogPrinter创建并格式化输出,然后将其发送到LogOutput。 你可以实现自己的LogPrinter,以获得最大的灵活性。

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

class MyPrinter extends LogPrinter {
  @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插件PrefixPrinter装饰器来实现任何日志的彩色输出:

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

日志输出

LogOutput将日志行发送到所需的输出目的地。 默认实现(ConsoleOutput)将每一行发送到系统控制台。

class ConsoleOutput extends LogOutput {
  @override
  void output(OutputEvent event) {
    for (final line in event.lines) {
      print(line);
    }
  }
}

未来可能的LogOutput可以发送到文件、Firebase或Logcat。请随时提交拉取请求。

logger_flutter扩展

logger_flutter插件是logger的扩展,你可以将其添加到任何Flutter应用中。只需摇晃手机即可显示控制台。

MIT许可证

Copyright (c) 2019 Simon Leier

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

示例代码

import 'package:logger_fork/logger_fork.dart';

var logger = Logger(
  printer: PrettyPrinter(),
);

var loggerNoStack = Logger(
  printer: PrettyPrinter(methodCount: 0),
);

void main() {
  print('Run with either `dart example/main.dart` or `dart --enable-asserts example/main.dart`.');
  demo();
}

void demo() {
  logger.d('Log message with 2 methods');

  loggerNoStack.i('Info message');

  loggerNoStack.w('Just a warning!');

  logger.e('Error! Something bad happened', 'Test Error');

  loggerNoStack.v({'key': 5, 'value': 'something'});

  Logger(printer: SimplePrinter(colors: true)).v('boom');
}

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

1 回复

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


logger_fork 是一个 Flutter 日志记录插件,它是 logger 的一个分支版本,提供了更灵活的日志记录功能。使用 logger_fork,你可以轻松地在 Flutter 应用中记录不同级别的日志,并且可以自定义日志的输出格式和输出位置。

以下是如何在 Flutter 项目中使用 logger_fork 的步骤:


1. 添加依赖

pubspec.yaml 文件中添加 logger_fork 依赖:

dependencies:
  flutter:
    sdk: flutter
  logger_fork: ^1.1.0  # 使用最新版本

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


2. 基本用法

在代码中导入 logger_fork 并创建一个 Logger 实例:

import 'package:logger_fork/logger.dart';

void main() {
  var logger = Logger();

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

3. 日志级别

Logger 支持不同级别的日志,默认情况下会打印所有级别的日志。你可以通过设置 level 来过滤日志:

var logger = Logger(
  level: Level.info,  // 只打印 info 及以上级别的日志
);

支持的日志级别(从低到高):

  • Level.verbose
  • Level.debug
  • Level.info
  • Level.warning
  • Level.error
  • Level.wtf

4. 自定义输出格式

你可以通过 Printer 自定义日志的输出格式。例如,使用 PrettyPrinter 可以让日志输出更美观:

var logger = Logger(
  printer: PrettyPrinter(),  // 使用 PrettyPrinter
);

PrettyPrinter 的常用配置:

var logger = Logger(
  printer: PrettyPrinter(
    colors: true,            // 启用颜色
    printEmojis: true,       // 打印表情符号
    methodCount: 2,          // 显示调用方法数量
    errorMethodCount: 5,     // 错误日志显示调用方法数量
    lineLength: 120,         // 日志行长度
    printTime: true,         // 打印时间
  ),
);

5. 自定义输出位置

默认情况下,日志会输出到控制台。你可以通过自定义 LogOutput 将日志输出到文件或其他位置。例如:

class FileOutput extends LogOutput {
  final File file;

  FileOutput(this.file);

  [@override](/user/override)
  void output(OutputEvent event) {
    for (var line in event.lines) {
      file.writeAsStringSync('$line\n', mode: FileMode.append);
    }
  }
}

void main() {
  var logger = Logger(
    output: FileOutput(File('log.txt')),  // 将日志输出到文件
  );

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

6. 其他功能

  • 过滤器:通过 Filter 过滤日志。
  • 日志缓存:使用 MemoryOutput 缓存日志。
  • 多输出:使用 MultiOutput 将日志输出到多个位置。

7. 完整示例

以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:logger_fork/logger.dart';

void main() {
  var logger = Logger(
    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");

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Logger Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Logger Demo'),
        ),
        body: Center(
          child: Text('Check your console for logs!'),
        ),
      ),
    );
  }
}
回到顶部