Flutter日志记录插件retro_logger的使用
Flutter日志记录插件retro_logger的使用
🚧 警告:开发进行中 🚧
此包正处于早期开发阶段,可能会引入破坏性更改。
Retro Logger
retro_logger
是一个轻量级的 Dart 包,为 Dart 和 Flutter 应用程序提供了一种复古风格的日志系统。它允许您以不同的级别记录消息,并使用预构建的小部件显示它们,使调试和监控更加简单且视觉上更具吸引力。
功能
- 多种日志级别:支持各种日志级别,如信息、警告、错误、成功、网络、UI、API 等。
- 复古风格小部件:提供预构建的小部件以复古风格显示日志。
- 过滤和搜索:轻松按类型过滤日志并按关键字搜索。
- 基准测试工具:包括同步和异步函数的基准测试工具。
- 轻量级:设计易于集成,不会增加显著开销。
示例
实时演示: https://retro-logger.web.app/
开始使用
安装
将 retro_logger
添加到您的 pubspec.yaml
文件:
使用 Flutter:
flutter pub add retro_logger
或者手动添加依赖:
dependencies:
retro_logger: ^0.0.1
然后运行:
flutter pub get
先决条件
- Dart SDK: ^3.5.2
- Flutter: >=1.17.0
使用方法
记录消息
要记录消息,请导入 retro_logger
包并使用 Logger
类:
import 'package:retro_logger/retro_logger.dart';
void main() {
// 记录不同级别的日志消息
Logger.success('This is a success message', name: 'Main');
Logger.info('This is an info message', name: 'Main');
Logger.warning('This is a warning message', name: 'Main');
Logger.error('This is an error message', name: 'Main');
}
注意:name
参数是一个字符串,用于标识日志来源,便于追踪日志。
显示日志
使用 LogListWidget
要使用预设列表视图显示日志,请使用 LogListWidget
:
import 'package:flutter/material.dart';
import 'package:retro_logger/retro_logger.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Retro Logger Example',
home: Scaffold(
appBar: AppBar(
title: const Text('Retro Logger Example'),
),
body: const LogListWidget(), // 使用 LogListWidget 显示日志
),
);
}
}
使用 LogManagerWidget
自定义
如果需要自定义日志显示,可以使用 LogManagerWidget
:
import 'package:flutter/material.dart';
import 'package:retro_logger/retro_logger.dart';
class CustomLogWidget extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return LogManagerWidget(
builder: (context, logs) {
return ListView.builder(
itemCount: logs.length,
itemBuilder: (context, index) {
final log = logs[index];
return ListTile(
title: Text(log.message),
subtitle: Text(log.name),
leading: Icon(Icons.bug_report, color: Logger.getColor(log.level)), // 根据日志级别设置图标颜色
);
},
);
},
);
}
}
访问 LogManager
实例
对于高级日志控制,可以直接与 LogManager
单例交互:
final LogManager logManager = LogManager.instance;
// 手动添加日志
logManager.addLog(Log(
name: 'CustomName',
level: 'info',
message: 'This is a custom log message',
type: LogType.other,
));
// 清除所有日志
logManager.clearLogs();
// 按类型过滤日志
logManager.filterLogsByTypes({LogType.error, LogType.warning});
// 搜索日志
logManager.searchLogs('search query');
过滤和搜索日志
LogListWidget
内置了过滤和搜索功能:
- 按日志类型过滤:点击搜索栏中的过滤图标选择要显示的日志类型。
- 按关键字搜索:在搜索栏中输入关键字以筛选包含特定关键字的日志。
基准测试函数
使用 Logger
的基准测试工具测量函数执行时间:
同步函数
Logger.benchmark(() {
// your code here
}, (String elapsedTime) {
Logger.timestamp(
'Benchmark completed in $elapsedTime',
name: '_simulateLogs',
);
});
异步函数
await Logger.benchmarkAsync(() async {
// your code here
}, (String elapsedTime) {
Logger.timestamp(
'Benchmark completed in $elapsedTime',
name: '_simulateLogs',
);
});
注意:基准测试结果将以 timestamp
日志级别记录。
完整示例 Demo
以下是一个完整的示例应用程序,展示如何使用 retro_logger
:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:retro_logger/retro_logger.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: const LogScreen(),
);
}
}
class LogScreen extends StatefulWidget {
const LogScreen({super.key});
[@override](/user/override)
State<LogScreen> createState() => _LogScreenState();
}
class _LogScreenState extends State<LogScreen> {
[@override](/user/override)
void initState() {
super.initState();
_simulateLogs(); // 模拟生成一些日志
}
Future<void> _simulateLogs() async {
// 列出日志类型及对应的消息
final logMessages = [
() => Logger.network('This is a network log', name: '_simulateLogs'),
() => Logger.button('This is a button log', name: '_simulateLogs'),
() => Logger.database('This is a database log', name: '_simulateLogs'),
() => Logger.ui('This is a UI log', name: '_simulateLogs'),
() => Logger.api('This is an API log', name: '_simulateLogs'),
() => Logger.other('This is an other log', name: '_simulateLogs'),
() => Logger.error('This is an error log', name: '_simulateLogs'),
() => Logger.warning('This is a warning log', name: '_simulateLogs'),
() => Logger.success('This is a success log', name: '_simulateLogs'),
() => Logger.info('This is an info log', name: '_simulateLogs'),
() => Logger.fatal('This is a fatal log', name: '_simulateLogs'),
() => _benchmarkedLog(),
];
// 循环遍历日志消息
for (var logMessage in logMessages) {
await Future.delayed(const Duration(milliseconds: 100), () {
logMessage();
});
}
}
void _benchmarkedLog() {
Logger.benchmarkAsync(
() async {
await Future.delayed(const Duration(milliseconds: 500), () {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Benchmark completed')),
);
});
},
(String elapsedTime) {
Logger.timestamp(
'Benchmark completed in $elapsedTime',
name: '_simulateLogs',
);
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Theme(
data: ThemeData.dark(),
child: Scaffold(
appBar: AppBar(title: const Text('Logs')),
body: const SafeArea(child: LogTabView()), // 使用 LogTabView 显示日志
floatingActionButton: FloatingActionButton(
onPressed: () {
Logger.info(
[
'This is an info log',
'with multiple lines',
'and json data\n\n'
'{"key": "value", "list": [1, 2, 3], "nested": {"key": "value"}, "bool": true}, "null": null',
],
name: 'FloatingActionButton',
);
},
child: const Icon(Icons.add),
),
),
);
}
}
更多关于Flutter日志记录插件retro_logger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件retro_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用retro_logger
插件进行日志记录的示例代码。retro_logger
是一个用于在Flutter应用中记录和显示日志的插件,特别适用于开发过程中的调试。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加retro_logger
的依赖:
dependencies:
flutter:
sdk: flutter
retro_logger: ^0.x.x # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化RetroLogger
在你的Flutter应用的入口文件(通常是main.dart
)中,初始化RetroLogger
。
import 'package:flutter/material.dart';
import 'package:retro_logger/retro_logger.dart';
void main() {
// 初始化RetroLogger
RetrofitLogger.init(
level: LogLevel.verbose, // 设置日志级别
writer: PlatformLogWriter(), // 使用默认的日志写入器
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('RetroLogger Demo'),
),
body: Center(
child: MyHomePage(),
),
),
);
}
}
3. 使用RetroLogger记录日志
现在你可以在你的应用中的任何地方使用RetroLogger
来记录日志。例如:
import 'package:flutter/material.dart';
import 'package:retro_logger/retro_logger.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 记录不同级别的日志
RetrofitLogger.v('这是一个verbose日志');
RetrofitLogger.d('这是一个debug日志');
RetrofitLogger.i('这是一个info日志');
RetrofitLogger.w('这是一个warn日志');
RetrofitLogger.e('这是一个error日志');
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('检查控制台输出或RetroLogger界面以查看日志。'),
ElevatedButton(
onPressed: () {
// 按钮点击时记录日志
RetrofitLogger.i('按钮被点击了');
},
child: Text('点击我记录日志'),
),
],
);
}
}
4. 查看日志
在开发过程中,日志通常会直接输出到控制台。此外,如果你需要更详细的日志查看界面,你可能需要配置或使用RetroLogger提供的UI组件来显示日志。
5. 自定义日志格式(可选)
你可以通过实现LogWriter
接口来自定义日志的输出格式。例如:
class CustomLogWriter implements LogWriter {
@override
void write(LogLevel level, String message, Throwable throwable) {
// 自定义日志输出格式
String logMessage = "${level.name}: $message";
if (throwable != null) {
logMessage += "\n${throwable.toString()}";
}
print(logMessage);
}
}
// 在RetrofitLogger.init时使用自定义的LogWriter
RetrofitLogger.init(
level: LogLevel.verbose,
writer: CustomLogWriter(),
);
通过上述步骤,你就可以在Flutter应用中使用retro_logger
进行日志记录了。希望这对你有所帮助!