深色模式
Flutter日志库logger
logger库
Flutter的 logger库。
小巧、易用且可扩展的日志工具,可打印美观的日志。灵感来源于 Android 的 Logger。
它不仅可以区分等级,还可以打印对象,并自动格式化。
使用
安装
sh
flutter pub add logger
简单使用
创建Logger对象,打印日志:
dart
import 'package:logger/logger.dart';
class HomePage extends HookConsumerWidget {
const HomePage({super.key});
final logger = Logger();
@override
Widget build(BuildContext context, WidgetRef ref) {
onclickFoo(){
logger.i('hello world');
}
// ...
}
}
输出:
可以看到,不同等级的日志,显示为不同的颜色。
配置进阶
全局Logger实例
dart
import 'package:logger/logger.dart';
final gLogger = Logger();
打印样式
通过Logger()
构造函数的printer
参数,配置打印的样式,该库提供了以下几种Printer
:
PrettyPrinter
: 突出样式SimplePrinter
: 朴素样式PrefixPrinter
: 包装型Printer
,分级别添加固定的前缀HybridPrinter
: 包装型Printer
,分级别组合多个Printer
LogfmtPrinter
: 输出结构化信息,一般不用于打印,而是存储并分析
效果预览
先创建几个Logger实例,使用不同的Printer,再写一个简单的Widget,使用这些Logger打印,代码如下:
dart
final prettyLogger = Logger(printer: PrettyPrinter());
final simpleLogger = Logger(printer: SimplePrinter());
final prefixLogger = Logger(printer: PrefixPrinter(SimplePrinter(), trace: '[跟踪]', debug: '[调试]', info: '[信息]', warning: '[警告]', error: '[错误]', fatal: '[灾难]'));
final hybridLogger = Logger(printer: HybridPrinter(SimplePrinter(), error: PrettyPrinter(), fatal: PrettyPrinter()));
final logfmtLogger = Logger(printer: LogfmtPrinter());
dart
class DebugLogger extends StatelessWidget {
DebugLogger({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Debug Logger')),
body: Column(
children: [
FilledButton(onPressed: _onPressedPretty, child: Text('use Pretty Printer')),
FilledButton(onPressed: _onPressedSimple, child: Text('use Simple Printer')),
FilledButton(onPressed: _onPressedPrefix, child: Text('use Prefix Printer')),
FilledButton(onPressed: _onPressedHybrid, child: Text('use Hybrid Printer')),
FilledButton(onPressed: _onPressedLogfmt, child: Text('use Logfmt Printer')),
],
),
);
}
_onPressedPretty() {
prettyLogger.t('verbose info from pretty printer');
prettyLogger.d('debug info from pretty printer');
prettyLogger.i('info info from pretty printer');
prettyLogger.w('warning info from pretty printer');
prettyLogger.e('error info from pretty printer');
prettyLogger.f('fatal info from pretty printer');
}
_onPressedSimple() {
simpleLogger.t('verbose info from simple printer');
simpleLogger.d('debug info from simple printer');
simpleLogger.i('info info from simple printer');
simpleLogger.w('warning info from simple printer');
simpleLogger.e('error info from simple printer');
simpleLogger.f('fatal info from simple printer');
}
_onPressedPrefix() {
prefixLogger.t('verbose info from prefix printer');
prefixLogger.d('debug info from prefix printer');
prefixLogger.i('info info from prefix printer');
prefixLogger.w('warning info from prefix printer');
prefixLogger.e('error info from prefix printer');
prefixLogger.f('fatal info from prefix printer');
}
_onPressedHybrid() {
hybridLogger.t('verbose info from hybrid printer');
hybridLogger.d('debug info from hybrid printer');
hybridLogger.i('info info from hybrid printer');
hybridLogger.w('warning info from hybrid printer');
hybridLogger.e('error info from hybrid printer');
hybridLogger.f('fatal info from hybrid printer');
}
_onPressedLogfmt() {
logfmtLogger.t('verbose info from logfmt printer');
logfmtLogger.d('debug info from logfmt printer');
logfmtLogger.i('info info from logfmt printer');
logfmtLogger.w('warning info from logfmt printer');
logfmtLogger.e('error info from logfmt printer');
logfmtLogger.f('fatal info from logfmt printer');
}
}
点击各个Button可看到日志打印效果:
PrettyPrinter
SimplePrinter
PrefixPrinter
HybridPrinter
对于错误及以上级别,使用
PrettyPrinter
的效果,其它则使用SimplePrinter
的效果。LogfmtPrinter
可读性比较差,一般不用于打印,而是存储在日志分析系统中。