Flutter日志记录插件loggerw的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter日志记录插件loggerw的使用

loggerw 是一个轻量级且易于使用的日志记录插件,它能够打印出美观的日志并将其记录到你选择的API中。该插件受到了 Android 中的 logger 插件的启发。

资源

入门指南

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

var logger = Logger();

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

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

输出

日志级别

你可以使用不同的日志级别:

logger.t("Trace log"); // 跟踪日志
logger.d("Debug log"); // 调试日志
logger.i("Info log"); // 信息日志
logger.w("Warning log"); // 警告日志
logger.e("Error log", error: 'Test Error'); // 错误日志
logger.f("What a fatal log", error: error, stackTrace: stackTrace); // 致命日志

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

Logger.level = Level.warning; // 隐藏跟踪、调试和信息日志

选项

在创建 Logger 实例时,可以传递一些选项:

var logger = Logger(
  filter: null, // 使用默认的 LogFilter(仅在调试模式下记录)
  printer: PrettyPrinter(), // 使用 PrettyPrinter 格式化和打印日志
  output: null, // 使用默认的 LogOutput(发送到控制台)
  apiURL: "${dotenv.env['API_URL']}/logs", // 可选:将日志发送到指定的 API URL
);

如果你使用了 PrettyPrinter,则可以有更多的选项:

var logger = Logger(
  printer: PrettyPrinter(
      methodCount: 2, // 显示的方法调用数量
      errorMethodCount: 8, // 如果提供了堆栈跟踪,则显示的方法调用数量
      lineLength: 120, // 输出宽度
      colors: true, // 彩色日志消息
      printEmojis: true, // 每个日志消息打印表情符号
      printTime: false // 每个日志是否包含时间戳
  ),
  apiURL: "${dotenv.env['API_URL']}/logs", // 可选:将日志发送到指定的 API URL
);

将日志发送到API

现在你可以通过 Logger 类将日志发送到指定的API URL。新的可选参数 apiURL 允许你提供日志信息将被发送的目标URL。

var logger = Logger(
  filter: null,
  printer: PrettyPrinter(),
  output: null,
  apiURL: "${dotenv.env['API_URL']}/logs", // 可选:将日志发送到指定的 API URL
);

自动检测

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

除非有特殊原因不希望导入 io(例如在Web上使用此库),否则你应该这样做。

LogFilter

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

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

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

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

这将即使在发布模式下也会显示所有日志。(不是好主意

LogPrinter

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

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

一个非常基础的打印机可能看起来像这样:

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

如果你创建了一个可能对其他人有用的 LogPrinter,请随意提交一个拉取请求。

颜色

请注意,在某些情况下,ANSI 转义序列在 macOS 下不起作用。这些转义序列用于颜色化输出。这似乎与影响iOS构建的 Flutter bug 有关: https://github.com/flutter/flutter/issues/64491

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

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

LogOutput

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

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

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

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用logger插件进行日志记录的示例。logger是一个非常流行的Flutter日志记录库,它提供了丰富的日志记录功能和配置选项。

1. 添加依赖

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

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

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

2. 配置Logger

在你的Flutter项目的某个合适的位置(例如main.dart或者一个专门的配置文件中)配置Logger:

import 'package:logger/logger.dart';

// 配置Logger
final logger = Logger(
  printer: PrettyPrinter(
    methodCount: 2,  // 打印调用堆栈的深度
    errorMethodCount: 8,  // 错误日志打印调用堆栈的深度
    logOptions: LogOptions(
      showLevel: true,  // 是否显示日志级别
      showDateTime: true,  // 是否显示日期和时间
      showThreadInfo: true,  // 是否显示线程信息
      showErrorAsException: true,  // 是否将错误日志作为异常处理
      prettyPrint: true  // 是否使用漂亮的打印格式
    )
  )
);

3. 使用Logger记录日志

现在你可以在你的Flutter项目中的任何地方使用Logger来记录日志了:

import 'package:flutter/material.dart';

void main() {
  // 配置Logger(如果还没有配置)
  // final logger = Logger(...);

  runApp(MyApp(logger: logger));
}

class MyApp extends StatelessWidget {
  final Logger logger;

  MyApp({required this.logger});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Logger Example'),
        ),
        body: Center(
          child: LoggerButton(logger: logger),
        ),
      ),
    );
  }
}

class LoggerButton extends StatelessWidget {
  final Logger logger;

  LoggerButton({required this.logger});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // 记录不同级别的日志
        logger.v('This is a verbose log');
        logger.d('This is a debug log');
        logger.i('This is an info log');
        logger.w('This is a warning log');
        logger.e('This is an error log', null, Stacktrace.current);

        // 你也可以记录对象
        logger.i('User info: ${userInfo()}');
      },
      child: Text('Log Messages'),
    );
  }

  // 示例用户信息函数
  Map<String, String> userInfo() {
    return {
      'name': 'John Doe',
      'email': 'john.doe@example.com',
    };
  }
}

4. 运行项目

运行你的Flutter项目,点击按钮后,你应该能够在控制台中看到格式化的日志输出。

这个示例展示了如何配置和使用logger插件进行日志记录。你可以根据实际需求进一步自定义Logger的配置和日志记录的方式。

回到顶部