Flutter日志记录插件logger的使用

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

Flutter日志记录插件logger的使用

简介

Logger 是一个小型、易于使用且可扩展的日志记录库,它打印出漂亮且格式化的日志。该插件受到Android平台上的 logger 的启发。

pub package CI Last Commits Pull Requests Code size License

资源


快速开始

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

import 'package:logger/logger.dart';

void main() {
  var logger = Logger();
  logger.d("Logger is working!");
}

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


日志级别

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

var logger = Logger();

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, // 使用默认过滤器(仅在调试模式下记录日志)
  printer: PrettyPrinter(), // 使用PrettyPrinter格式化和打印日志
  output: null, // 使用默认输出(将所有内容发送到控制台)
);

如果你使用 PrettyPrinter,可以进一步自定义输出格式:

var logger = Logger(
  printer: PrettyPrinter(
      methodCount: 2, // 显示的方法调用数量
      errorMethodCount: 8, // 如果提供堆栈跟踪,则显示的方法调用数量
      lineLength: 120, // 输出宽度
      colors: true, // 彩色日志消息
      printEmojis: true, // 每条日志前打印表情符号
      dateTimeFormat: DateTimeFormat.onlyTimeAndSinceStart, // 包含时间戳
  ),
);

自动检测

使用 io 包可以自动检测 lineLengthcolors 参数:

import 'dart:io' as io;

var logger = Logger(
  printer: PrettyPrinter(
    lineLength: io.stdout.terminalColumns,
    colors: io.stdout.supportsAnsiEscapes,
  ),
);

自定义 LogFilter

LogFilter 决定哪些日志事件应该显示,哪些不应该。默认实现 (DevelopmentFilter) 在调试模式下显示所有日志,在发布模式下不显示任何日志。

你可以创建自己的 LogFilter

class MyFilter extends LogFilter {
  @override
  bool shouldLog(LogEvent event) {
    return true; // 显示所有日志(不推荐用于发布模式)
  }
}

var logger = Logger(filter: MyFilter());

自定义 LogPrinter

LogPrinter 创建和格式化输出,然后将其发送给 LogOutput。你可以实现自己的 LogPrinter

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

var logger = Logger(printer: MyPrinter());

自定义 LogOutput

LogOutput 将日志行发送到目标位置。默认实现 (ConsoleOutput) 将每行发送到系统控制台。

你可以创建自己的 LogOutput

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

var logger = Logger(output: MyOutput());

示例代码

以下是一个完整的示例代码,展示了如何使用 Logger 插件:

import 'package:logger/logger.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', error: 'Test Error');

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

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

通过上述内容,你应该能够轻松地在Flutter项目中集成并使用 Logger 插件来记录和查看日志。希望这些信息对你有所帮助!


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用logger插件进行日志记录的代码示例。logger插件是一个非常流行的Flutter库,用于在开发过程中方便地记录日志。

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

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

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

安装完成后,你可以在你的Flutter项目中配置和使用logger。以下是一个简单的示例,展示了如何配置和使用logger进行日志记录:

  1. 配置Logger
import 'package:logger/logger.dart';

final logger = Logger(
  printer: PrettyPrinter(
    logOptions: PrettyPrinterLogOptions(
      methodCount: 2, // 打印日志时包含的方法调用堆栈层数
      errorMethodCount: 8, // 打印错误时包含的方法调用堆栈层数
      linePrecision: 2, // 打印代码行号时保留的精度
      colors: true, // 是否启用颜色
      printEmojis: true, // 是否打印表情符号
      printTime: true, // 是否打印时间戳
    )
  )
);
  1. 使用Logger
import 'package:flutter/material.dart';

void main() {
  // 初始化Logger配置
  configureLogger();

  runApp(MyApp());
}

void configureLogger() {
  // 可以将配置放在这里,如果你有更复杂的配置需求
  // 这里只是简单地使用上面定义的logger实例
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Logger Demo'),
        ),
        body: Center(
          child: 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');

              // 也可以记录对象或异常
              try {
                throw Exception('This is an exception');
              } catch (e, stackTrace) {
                logger.e('Exception caught', e, stackTrace);
              }
            },
            child: Text('Log Messages'),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们首先配置了logger实例,指定了一些打印选项,如是否启用颜色、是否打印表情符号、是否打印时间戳等。然后在MyApp组件中,我们创建了一个按钮,当按钮被点击时,会记录不同级别的日志信息,包括verbose、debug、info、warning和error。

这样,你就可以在Flutter项目中方便地使用logger插件进行日志记录了。在实际开发中,你可以根据需要调整日志的级别和格式,以便更好地进行调试和监控。

回到顶部