Flutter日志管理插件hemend_logger的使用

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

Flutter日志管理插件hemend_logger的使用

Hemend Logger

License: MIT pub package git repo pub points code size code_count Tests codecov

简单日志管理器,扩展了Logging包来管理日志系统。

AnsiLogger

安装 💻

❗ 要开始使用Hemend Logger,必须在您的机器上安装Dart SDK。

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

dependencies:
  hemend_logger: <latest-version>

然后运行以下命令安装它:

dart pub get

使用

本软件包采用了logging包作为其默认的日志机制,提供了基本的日志功能。然而,用户可以通过集成他们自己的自定义日志系统或方法来增强和改进此日志系统。

当前包包含一个AnsiLogger作为其内置的日志工具,该工具可以有效地在终端环境中打印日志。然而,它具有灵活性,可以被扩展以生成不同的日志功能。例如,它可以被扩展以支持在线日志记录,允许持久存储日志数据。此外,它可以进一步增强以提供应用程序内的交互式日志系统,使您能够利用吐司消息或其他机制在应用程序界面内传达日志信息。

为了增强此包的功能,您可以使用扩展包,如:

  • hemend_async_log_recorder

    • 支持异步日志记录,包括文件日志记录、WebSocket和HTTP请求。
    • 支持Isolated日志记录,这有助于在高负载情况下保持应用平稳运行,即使使用多个日志记录器(如文件记录器、Sentry记录器、ANSI记录器和WebSocket记录器)也是如此。
  • hemend_sentry_log_recorder

    • 为Sentry实例提供简单的日志记录器。

初始化

为了获得最佳使用效果,建议使用[HemendLogger]提供的默认配置。通过这样做,您可以使用预定义的设置和规格,而无需任何额外的定制。

HemendLogger.defaultLogger()

要在主方法中修改应用程序的日志级别,可以在初始化[HemendLogger]之前使用Logger.root.level = <Level>选项。这种方法允许您调整日志详细程度并控制应用程序生成的日志信息量。

要启用分层日志功能,必须确保将hierarchicalLoggingEnabled变量设置为true。该变量由logging包提供,允许分层日志系统正常工作。通过启用此变量,您可以启用分层结构,从而实现更细粒度的控制和日志记录器及日志级别的组织。

对于自定义日志功能的使用,请参阅包内提供的相关文档。

可访问性

由于该包的默认实现主要是logging包提供的默认Logger的包装器,其主要贡献在于提供了一个有用的mixin。此mixin可以应用于类,从而授予它们额外的日志功能。通过引入此mixin,类可以无缝地将日志功能集成到其实现中,增强其日志功能,并促进生成信息丰富的日志消息。

class Example with LogableObject{
  [@override](/user/override)
  String get loggerName => 'ExampleObject';
}

或者,您可以直接使用由logging包提供的默认Logger类,而不依赖于任何附加的mixin或自定义实现。默认的Logger类提供了可以直接在代码中访问和使用的全面的日志功能集。通过使用默认的Logger,您可以以直接的方式利用logging包提供的功能,而无需任何额外的扩展或mixin。

持续集成 🤖

Hemend Logger附带了一个由Very Good Workflows驱动的GitHub Actions内置工作流,但您也可以添加自己的首选CI/CD解决方案。

开箱即用,在每次拉取请求和推送时,CI会格式化检查测试代码。这确保了代码的一致性和正确性,即使您添加功能或进行更改。该项目使用Very Good Analysis进行严格的分析选项,这些选项由我们的团队使用。使用Very Good Workflows强制执行代码覆盖率。

示例代码

// ignore_for_file: avoid_print,avoid_redundant_argument_values

import 'package:hemend_logger/hemend_logger.dart';

Future<void> main() async {
  // 设置日志级别为ALL,以便捕获所有级别的日志
  Logger.root.level = Level.ALL;

  // 初始化默认的日志记录器
  HemendLogger.defaultLogger(preferPrintOverLog: true);

  // 初始化JSON格式的日志记录器
  HemendLogger.jsonLogger();

  // 启用在日志输出末尾添加日志级别
  AnsiLogger.addTrailingLevel = true;

  // 设置日志级别映射
  HemendLogger.loggerLevelMapper = HemendLogger.logLevel2Name;

  // 创建一个名为'ExampleLogger'的Logger实例
  Logger('ExampleLogger')
    ..finest('this is finest with level value:${Level.FINEST.value}')
    ..finer('this is finer with level value:${Level.FINER.value}')
    ..fine('this is fine with level value:${Level.FINE.value}')
    ..config('this is config with level value:${Level.CONFIG.value}')
    ..info('this is info with level value:${Level.INFO.value}')
    ..warning('this is warning with level value:${Level.WARNING.value}')
    ..severe('this is severe with level value:${Level.SEVERE.value}')
    ..shout('this is shout with level value:${Level.SHOUT.value}');

  // 创建一个ExampleClass实例并调用test方法
  ExampleClass().test();

  // 创建一个ANSI控制台样式对象,用于打印彩色文本
  final style = AnsiConsoleStyle([
    AnsiColorStyle(
      color: AnsiColor.fromRgp(
        red: 250,
        green: 150,
      ),
    ),
    AnsiColorStyle(
      color: AnsiColor.fromRgp(
        red: 50,
        green: 50,
        blue: 200,
      ),
      mode: AnsiColorMode.background,
    ),
    AnsiTextEffect.fastBlink,
  ]);

  // 打印带有RGB颜色和蓝色背景的闪烁文本
  print(style.wrap('blinking with rgb color and blue bg'));
}

// 示例类,继承了LogableObject
class ExampleClass with LogableObject {
  [@override](/user/override)
  // 返回日志名称
  String get loggerName => runtimeType.toString();

  // 测试方法,调用各种级别的日志记录
  void test() {
    finest('this is finest with level value:${Level.FINEST.value}');
    finer('this is finer with level value:${Level.FINER.value}');
    fine('this is fine with level value:${Level.FINE.value}');
    config('this is config with level value:${Level.CONFIG.value}');
    info('this is info with level value:${Level.INFO.value}');
    warning('this is warning with level value:${Level.WARNING.value}');
    shout('this is shout with level value:${Level.SHOUT.value}');
    severe(
      'test error carrier',
      Exception('error happens'),
      StackTrace.current,
    );

    // 访问logger本身
    config(logger.name);
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用hemend_logger插件进行日志管理的示例代码。hemend_logger是一个用于Flutter的日志管理插件,它允许你以结构化的方式记录和管理日志。

首先,确保你已经在你的pubspec.yaml文件中添加了hemend_logger依赖:

dependencies:
  flutter:
    sdk: flutter
  hemend_logger: ^最新版本号  # 请替换为实际最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用hemend_logger

  1. 初始化Logger

在你的应用的主入口文件(通常是main.dart)中,初始化HemendLogger

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

void main() {
  // 初始化HemendLogger
  HemendLogger.init(
    level: LogLevel.verbose, // 设置日志级别
    printToConsole: true,    // 是否打印到控制台
    logFilePath: 'logs.txt', // 指定日志文件路径(可选)
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Log Management'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}
  1. 记录日志

在你的应用中的任何位置,你都可以使用HemendLogger来记录日志。

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () {
            // 记录不同级别的日志
            HemendLogger.verbose('This is a verbose log');
            HemendLogger.debug('This is a debug log');
            HemendLogger.info('This is an info log');
            HemendLogger.warn('This is a warning log');
            HemendLogger.error('This is an error log');
          },
          child: Text('Log Messages'),
        ),
        ElevatedButton(
          onPressed: () {
            // 记录带有附加信息的日志
            var additionalInfo = {
              'user_id': '12345',
              'action': 'button_clicked'
            };
            HemendLogger.info('Button clicked with additional info', additionalInfo);
          },
          child: Text('Log with Additional Info'),
        ),
      ],
    );
  }
}
  1. 查看日志
  • 控制台:如果printToConsole设置为true,日志将打印到控制台。
  • 日志文件:如果指定了logFilePath,日志将被写入到该文件中,你可以在应用的文件系统中找到并查看它。

这个示例展示了如何使用hemend_logger插件来记录和管理日志。你可以根据需要调整日志级别、日志格式和其他配置。如果你需要更复杂的日志管理功能,比如远程日志上传或日志分类,你可以查阅hemend_logger的官方文档以获取更多信息。

回到顶部