flutter中如何优雅的使用日志

2022-09-20 16:42:07 浏览数 (1)

flutter中的logger

flutter中的日志使用print实现,但是print只能显示一种颜色,这样我们调试起来比较麻烦。所以,我在ansicolor的基础上实现了一个可以控制颜色的日志记录框架。

如何使用

已发布pub,直接引用即可

colorize_logger: ^[last version]

地址:https://pub.dev/packages/colorize_logger

github: https://github.com/TaleAi/flutter_colorize_logger

screenshot.png

优点

  • 有 info、warning、error、fatal四种日志类型及颜色
  • release模式自动关闭日志
  • 可自定义输出风格

简单用法

代码语言:javascript复制
import 'package:colorize_logger/colorize_logger.dart';

// 初始化
Logger.client = ColorizeLoggerClient();

Logger.info('info');
Logger.warning('waring', tag: '_MyHomePageState');/// 可以设置tag
Logger.fatal('fatal');
Logger.error('error');

自定义扩展

先来看看基类

代码语言:javascript复制
abstract class LoggerClient {
  void info(String message, {String? tag});
  void warning(String message, {String? tag});
  void error(String message, {String? tag});
  void fatal(String message, {String? tag});
}

只要继承并实现LoggerClient的方法就可以自定义了

代码语言:javascript复制
import 'package:ansicolor/ansicolor.dart';

import 'client.dart';

class CustomLoggerClient extends LoggerClient {
  @override
  void error(String message, {String? tag}) {
    final error = AnsiPen()
      ..white(bold: true)
      ..xterm(88, bg: true);
    print(error(_format(tag ?? 'ERROR', message)));
  }

  @override
  void fatal(String message, {String? tag}) {
    final fatal = AnsiPen()
      ..white()
      ..red(bg: true);
    print(fatal(_format(tag ?? 'FATAL', message)));
  }

  @override
  void info(String message, {String? tag}) {
    final info = AnsiPen()
      ..black()
      ..green(bg: true);
    print(info(_format(tag ?? 'INFO', message)));
  }

  @override
  void warning(String message, {String? tag}) {
    final info = AnsiPen()
      ..black()
      ..yellow(bg: true);
    print(info(_format(tag ?? 'WARNING', message)));
  }

  String _format(String tag, String message) {
    return '[$tag] $message';
  }
}

接下来只要在初始化的地方替换就可以实现自定义日志

代码语言:javascript复制
Logger.client = CustomLoggerClient();

下一步计划

考虑到在实际应用中,给测试的包是release的版本,这样有问题的时候我们无法看到日志,所以下一步的计划是

  • 实现一个基于文件的日志记录,可以存储在手机中,这样有问题可以导出日志给开发看

0 人点赞