Flutter日志记录插件logger_success的使用

Flutter日志记录插件logger_success的使用

Logger

小而易于使用且可扩展的日志库,可以打印美观的日志。
灵感来自logger for Android。

这个包是从logger复制而来,并添加了绿色打印成功数据的功能。

如果你喜欢这个项目,请给它点个赞以支持我们!

资源

开始使用

只需创建一个Logger实例并开始记录:

var logger = Logger();

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

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

输出

截图1
截图2

文档

日志级别

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

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'});

loggerNoStack.s("This is a success message without stack!");

logger.s("This is a success message with stack!");

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

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

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](/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,并且认为对其他人也有帮助,请随时提交拉取请求。

颜色

请注意,在某些情况下,ANSI转义序列在macOS下不起作用。这些转义序列用于着色输出。

这似乎与影响iOS构建的Flutter错误有关: https://github.com/flutter/flutter/issues/64491

然而,如果你正在使用JetBrains IDE(如Android Studio、IntelliJ等),你可以使用 Grep Console插件PrefixPrinter 装饰器来实现任何日志记录器的彩色日志:

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);
    }
  }
}

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

1 回复

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


logger_success 是一个用于 Flutter 应用的日志记录插件,它可以帮助开发者更方便地记录和管理日志信息。这个插件提供了多种日志级别、颜色输出、文件存储等功能,使得日志记录更加灵活和高效。

安装 logger_success

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

dependencies:
  flutter:
    sdk: flutter
  logger_success: ^1.0.0  # 请确保使用最新版本

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

基本使用

1. 导入包

import 'package:logger_success/logger_success.dart';

2. 创建 Logger 实例

Logger logger = Logger();

3. 记录日志

logger_success 提供了多个日志级别,你可以根据需要选择合适的级别:

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. 自定义输出格式

你可以通过 Printer 来自定义日志的输出格式。logger_success 提供了 PrettyPrinter,它可以将日志格式化为更易读的形式:

Logger logger = Logger(
  printer: PrettyPrinter(
    methodCount: 2,  // 显示的方法调用数量
    errorMethodCount: 8,  // 显示的错误方法调用数量
    lineLength: 120,  // 每行的最大长度
    colors: true,  // 是否启用颜色
    printEmojis: true,  // 是否打印表情符号
    printTime: false,  // 是否打印时间
  ),
);

5. 输出到文件

你还可以将日志输出到文件中,以便后续分析:

Logger logger = Logger(
  printer: PrettyPrinter(),
  output: FileOutput('logs.txt'),
);

FileOutput 是一个自定义的输出类,你需要自己实现它。以下是一个简单的实现示例:

class FileOutput extends LogOutput {
  final String filePath;

  FileOutput(this.filePath);

  @override
  void output(OutputEvent event) {
    final file = File(filePath);
    file.writeAsStringSync(event.lines.join('\n') + '\n', mode: FileMode.append);
  }
}

高级功能

1. 过滤日志

你可以通过 Level 来过滤日志,只输出特定级别的日志:

Logger logger = Logger(
  filter: ProductionFilter(),  // 在生产环境下只输出错误日志
);

2. 自定义日志级别

你可以自定义日志级别,以满足特定的需求:

Logger logger = Logger(
  level: Level.warning,  // 只输出警告及以上级别的日志
);
回到顶部