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的版本,这样有问题的时候我们无法看到日志,所以下一步的计划是
- 实现一个基于文件的日志记录,可以存储在手机中,这样有问题可以导出日志给开发看