
一、插件介绍
logging_test是一个专为Flutter开发鸿蒙应用设计的日志测试组件,基于Dart标准库中的logging包进行鸿蒙化适配。该组件提供了完整的日志记录、日志级别管理、日志层级结构和日志监听功能,帮助开发者在OpenHarmony平台上轻松实现日志记录和测试。
主要功能特性:
- 支持标准日志级别(ALL、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、SHOUT、OFF)
- 提供日志层级结构,支持父子日志记录器
- 支持日志记录监听和自定义处理
- 支持异常和堆栈跟踪记录
- 支持区域(Zone)上下文记录
- 与OpenHarmony原生日志系统无缝集成
二、环境要求
在开始使用logging_test组件前,请确保您的开发环境满足以下要求:
- Flutter SDK: 2.19.6或以上版本
- Dart SDK: 2.19.6或以上版本
- OpenHarmony SDK: API 9或以上版本
- 开发工具: DevEco Studio 3.0或以上版本
三、依赖引入
由于logging_test组件是基于自定义修改的logging包,需要通过git形式引入。请按照以下步骤在您的项目中添加依赖:
- 打开项目根目录下的
pubspec.yaml文件 - 在
dependencies部分添加以下配置:
yaml
dependencies:
flutter:
sdk: flutter
logging:
git:
url: "https://atomgit.com/openharmony-sig/flutter_logging.git"
path: "logging"
logging_test:
git:
url: "https://atomgit.com/openharmony-sig/flutter_logging_test.git"
path: "logging_test"
- 保存文件后,执行以下命令获取依赖:
bash
flutter pub get
四、API使用
1. 初始化日志记录器
在使用日志功能前,需要初始化日志记录器并设置合适的日志级别:
dart
import 'package:logging/logging.dart';
void main() {
// 设置日志记录级别
Logger.root.level = Level.INFO;
// 注册日志监听
Logger.root.onRecord.listen((record) {
print('${record.time}: ${record.level.name}: ${record.loggerName}: ${record.message}');
});
// 创建日志记录器
final logger = Logger('my.logger');
// 记录日志
logger.info('应用启动');
}
2. 日志级别管理
logging_test支持以下日志级别(从低到高):
- ALL: 记录所有日志
- FINEST: 最详细的调试信息
- FINER: 更详细的调试信息
- FINE: 调试信息
- CONFIG: 配置信息
- INFO: 一般信息
- WARNING: 警告信息
- SEVERE: 严重错误
- SHOUT: 紧急错误
- OFF: 关闭所有日志
可以通过以下方式设置日志级别:
dart
// 设置根日志记录器级别
Logger.root.level = Level.INFO;
// 设置特定日志记录器级别
final logger = Logger('my.logger');
logger.level = Level.FINE;
3. 日志层级结构
日志记录器支持层级结构,通过点号分隔的名称创建父子关系:
dart
final parentLogger = Logger('parent');
final childLogger = Logger('parent.child');
final grandchildLogger = Logger('parent.child.grandchild');
// 层级关系
print(childLogger.parent == parentLogger); // true
print(grandchildLogger.parent == childLogger); // true
当启用层级日志记录时,子日志记录器会继承父记录器的级别和监听器:
dart
hierarchicalLoggingEnabled = true;
// 设置父记录器级别
parentLogger.level = Level.WARNING;
// 子记录器会继承父记录器的级别
print(childLogger.level); // Level.WARNING
4. 记录异常和堆栈跟踪
可以在日志中记录异常和堆栈跟踪:
dart
try {
throw UnsupportedError('测试异常');
} catch (error, stack) {
logger.log(Level.SEVERE, '发生严重错误', error, stack);
logger.warning('警告信息', error, stack);
}
5. 与OpenHarmony原生集成
通过MethodChannel实现Flutter与OpenHarmony原生日志系统的集成:
dart
// Flutter侧代码
import 'package:flutter/services.dart';
const MethodChannel channel = MethodChannel('com.example.yourapp/channel');
// 注册从原生接收日志的处理程序
channel.setMethodCallHandler((call) async {
if (call.method == 'sendLog') {
final String? log = call.arguments as String?;
if (log != null) {
Logger.root.info('从原生接收日志: $log');
}
}
});
// 发送日志到原生系统
void sendLogToNative(String message) {
channel.invokeMethod('submitLog', message);
}
typescript
// OpenHarmony侧代码 (CustomPlugin.ets)
import { MethodChannel } from '@ohos.flutter';
export default class CustomPlugin {
private channel: MethodChannel | null = null;
constructor(channelName: string) {
this.channel = new MethodChannel(channelName);
}
// 发送日志到Flutter
public sendLogToFlutter(log: string): void {
this.channel?.invokeMethod('sendLog', log);
}
// 接收Flutter日志并处理
public registerLogHandler(): void {
this.channel?.setMethodCallHandler((method, args) => {
if (method === 'submitLog') {
console.log(`Native received log: ${args}`);
// 可以将日志保存到文件或上传到服务器
}
});
}
}
五、代码示例
完整的日志测试页面示例
dart
import 'dart:async';
import 'package:logging/logging.dart';
import 'package:flutter/material.dart';
class LoggingTestPage extends StatefulWidget {
const LoggingTestPage({Key? key}) : super(key: key);
@override
_LoggingTestPageState createState() => _LoggingTestPageState();
}
class _LoggingTestPageState extends State<LoggingTestPage> {
final _logger = Logger('logging_test');
final List<String> _logMessages = [];
@override
void initState() {
super.initState();
// 设置日志级别
Logger.root.level = Level.ALL;
// 监听日志记录
Logger.root.onRecord.listen((record) {
setState(() {
_logMessages.add('${record.time}: ${record.level.name}: ${record.message}');
});
});
// 测试日志记录
testLogging();
}
void testLogging() {
_logger.finest('这是最详细的调试信息');
_logger.finer('这是更详细的调试信息');
_logger.fine('这是调试信息');
_logger.config('这是配置信息');
_logger.info('这是一般信息');
_logger.warning('这是警告信息');
_logger.severe('这是严重错误');
_logger.shout('这是紧急错误');
// 测试异常日志
try {
throw Exception('测试异常');
} catch (e, stack) {
_logger.severe('发生异常', e, stack);
}
// 测试日志层级
final childLogger = Logger('logging_test.child');
childLogger.info('这是子日志记录器的信息');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('日志测试'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: ListView.builder(
itemCount: _logMessages.length,
itemBuilder: (context, index) {
return Text(_logMessages[index]);
},
),
),
);
}
}
OpenHarmony页面集成示例
typescript
// Index.ets
import { FlutterPage, FlutterView } from '@ohos.flutter';
@Entry
@Component
struct Index {
private flutterViewId: string = 'logging_test_view';
build() {
Column() {
FlutterPage({
viewId: this.flutterViewId,
onLoad: () => {
console.log('Flutter日志测试页面加载完成');
}
})
}.width('100%').height('100%');
}
}
六、总结
logging_test组件为Flutter开发者提供了一套完整的日志测试解决方案,专门针对OpenHarmony平台进行了适配和优化。通过该组件,开发者可以:
- 使用标准的Dart日志API进行日志记录
- 灵活管理日志级别和日志层级结构
- 监听和处理日志事件
- 与OpenHarmony原生日志系统无缝集成
- 记录异常信息和堆栈跟踪
该组件的鸿蒙化适配,使得开发者可以在OpenHarmony平台上享受到与Dart原生开发相同的日志功能体验,同时支持跨平台开发的一致性。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net