Flutter日志记录插件en_logger的使用

Flutter日志记录插件en_logger的使用

EnLogger 允许你根据需要写入日志消息,而不会限制你将消息写入调试控制台或其他系统。它维护了一个内部的 EnLoggerHandlers 列表。你可以基于特定需求实现自己的 EnLoggerHandler。每次你想使用 EnLogger 记录消息时,每个 EnLoggerHandler 都会被调用来执行写操作。

  • 如果你需要你的系统将日志写入文件,实现一个 EnLoggerHandler 来执行写入文件的操作。
  • 如果你想将日志发送到 Sentry,实现一个 EnLoggerHandler,该处理器内部维护一个 Sentry 实例。每次写入日志时,调用 Sentry 的写入方法。

PrinterHandler 是库内提供的一个 EnLoggerHandler,允许你在开发者控制台上写入彩色消息。

一些示例可以在 示例项目 中看到。

日志符合 syslog 严重性级别。

安装

dependencies:
  en_logger:

配置

快速设置

  1. 创建一个 EnLogger 实例:final logger = EnLogger()
  2. 向你的日志记录器添加处理器:logger.addHandler(PrinterLogger())
  3. 写入日志:logger.debug('Arrived here'), logger.error('Error deserializing data')

前缀

日志可以有前缀。可以为这个前缀应用样式。

final logger = EnLogger(defaultPrefixFormat: PrefixFormat(
    startFormat: '[',
    endFormat: ']',
    style: PrefixStyle.uppercaseSnakeCase,
  ))
  ..addHandler(PrinterLogger())
  ..debug('get data', prefix: "API repository")

// 打印机输出 --> [API_REPOSITORY] get data

数据

消息可以包含附件,例如序列化数据、文件内容等。

// 带有数据的错误
logger.error(
  "error",
  data: [
    EnLoggerData(
      name: "response",
      content: jsonEncode("BE data"),
      description: "serialized BE response",
    ),
  ],
);

实例

为了避免每次都重写前缀,可以根据 EnLogger 创建实例。例如,如果你有一个特定的范围(如 API 存储库),你可以实例化一个带有前缀 “API repository” 的 EnLogger,并且这个前缀会包含在每条日志中,除非你明确覆盖它。

final instLogger = logger.getConfiguredInstance(prefix: 'API Repository');
instLogger.debug('a debug message'); // [API Repository] a debug message
instLogger.error(
  'error',
  prefix: 'Custom prefix',
); // [Custom prefix] a debug message

PrinterHandler

默认开发控制台处理器已着色。有一个基本的颜色设置,可以更新。

final printer = PrinterHandler()
  ..configure({Severity.notice: PrinterColor.green()});

你也可以创建自定义颜色。

PrinterColor.custom(schema: '\x1B[31m')

示例代码

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

import 'dart:convert';

import 'package:en_logger/en_logger.dart';
import 'package:sentry/sentry.dart';

void main(List<String> args) async {
  // 一个自定义处理器,底层使用 Sentry
  final sentry = await SentryHandler.init();

  // 默认打印机配置
  final printer = PrinterHandler()
    ..configure({Severity.notice: PrinterColor.green()});

  // 一个具有默认前缀格式的 enLogger
  final logger = EnLogger(
      defaultPrefixFormat: PrefixFormat(
    startFormat: '[',
    endFormat: ']',
    style: PrefixStyle.uppercaseSnakeCase,
  ))
    ..addHandlers([
      sentry,
      printer,
    ]);

  // 调试日志
  logger.debug('a debug message');

  // 带有数据的错误
  logger.error(
    "error",
    data: [
      EnLoggerData(
        name: "response",
        content: jsonEncode("BE data"),
        description: "serialized BE response",
      ),
    ],
  );

  // 带有前缀的日志实例
  final instLogger = logger.getConfiguredInstance(prefix: 'API Repository');
  instLogger.debug('a debug message'); // [API Repository] a debug message
  instLogger.error(
    'error',
    prefix: 'Custom prefix',
  ); // [Custom prefix] a debug message
}

class SentryHandler extends EnLoggerHandler {
  SentryHandler._();

  static Future<SentryHandler> init() async {
    await Sentry.init(
      (options) {
        options.dsn = 'https://example@sentry.io/example';
      },
    );
    return SentryHandler._();
  }

  [@override](/user/override)
  void write(
    String message, {
    required Severity severity,
    String? prefix,
    StackTrace? stackTrace,
    List<EnLoggerData>? data,
  }) {
    // 只是一个简单的示例
    // 精细调整你的实现...
    if (severity.atLeastError) {
      Sentry.captureException(message, stackTrace: stackTrace);
      return;
    }
    Sentry.captureMessage(message);
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用en_logger插件来进行日志记录的代码示例。en_logger是一个流行的Flutter日志记录库,它提供了灵活的日志级别管理和输出格式。

步骤 1: 添加依赖

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

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

然后运行flutter pub get来获取依赖。

步骤 2: 配置Logger

在你的应用入口文件(通常是main.dart)中配置Logger实例:

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

void main() {
  // 创建一个Logger实例
  final Logger logger = Logger(
    printer: PrettyPrinter(
      methodCount: 2, // 显示调用堆栈的深度
      errorMethodCount: 8, // 错误堆栈的深度
      lineLength: 120, // 每行的最大长度
      colors: true, // 是否使用颜色
      printEmojis: true, // 是否打印表情符号
      printTime: true, // 是否打印时间戳
    ),
  );

  // 设置全局Logger实例
  Log.logger = logger;

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Logger Example'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // 使用Logger记录不同级别的日志
        Log.d('This is a debug message');
        Log.i('This is an info message');
        Log.w('This is a warning message');
        Log.e('This is an error message');
      },
      child: Text('Log Messages'),
    );
  }
}

步骤 3: 运行应用

运行你的Flutter应用,当你点击按钮时,你应该会在控制台中看到格式化的日志输出,包括时间戳、日志级别和表情符号(如果启用了这些选项)。

日志输出示例

🔥  [LOG]  [2023-10-04 12:34:56.789] 🔍  [main.dart:45] This is a debug message
🔥  [INFO] [2023-10-04 12:34:56.789] 💡  [main.dart:46] This is an info message
🔥  [WARN] [2023-10-04 12:34:56.789] ⚠️  [main.dart:47] This is a warning message
🔥  [ERROR] [2023-10-04 12:34:56.789] 🔥  [main.dart:48] This is an error message

注意事项

  • en_logger提供了多种配置选项,可以根据你的需求进行调整,例如更改输出格式、日志级别过滤等。
  • 在生产环境中,你可能希望将日志输出到文件或远程服务器,而不是仅仅打印到控制台。en_logger支持通过自定义printer来实现这些功能。

通过上述步骤,你可以在Flutter项目中使用en_logger来高效地管理和记录日志。

回到顶部