Flutter跨平台开发鸿蒙化日志测试组件使用指南

一、插件介绍

logging_test是一个专为Flutter开发鸿蒙应用设计的日志测试组件,基于Dart标准库中的logging包进行鸿蒙化适配。该组件提供了完整的日志记录、日志级别管理、日志层级结构和日志监听功能,帮助开发者在OpenHarmony平台上轻松实现日志记录和测试。

主要功能特性:

  • 支持标准日志级别(ALL、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、SHOUT、OFF)
  • 提供日志层级结构,支持父子日志记录器
  • 支持日志记录监听和自定义处理
  • 支持异常和堆栈跟踪记录
  • 支持区域(Zone)上下文记录
  • 与OpenHarmony原生日志系统无缝集成

二、环境要求

在开始使用logging_test组件前,请确保您的开发环境满足以下要求:

  1. Flutter SDK: 2.19.6或以上版本
  2. Dart SDK: 2.19.6或以上版本
  3. OpenHarmony SDK: API 9或以上版本
  4. 开发工具: DevEco Studio 3.0或以上版本

三、依赖引入

由于logging_test组件是基于自定义修改的logging包,需要通过git形式引入。请按照以下步骤在您的项目中添加依赖:

  1. 打开项目根目录下的pubspec.yaml文件
  2. 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"
  1. 保存文件后,执行以下命令获取依赖:
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平台进行了适配和优化。通过该组件,开发者可以:

  1. 使用标准的Dart日志API进行日志记录
  2. 灵活管理日志级别和日志层级结构
  3. 监听和处理日志事件
  4. 与OpenHarmony原生日志系统无缝集成
  5. 记录异常信息和堆栈跟踪

该组件的鸿蒙化适配,使得开发者可以在OpenHarmony平台上享受到与Dart原生开发相同的日志功能体验,同时支持跨平台开发的一致性。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
妮妮分享2 小时前
Harmony NEXT 定位 SDK:开启鸿蒙原生应用精准定位新时代
华为·harmonyos
昼-枕3 小时前
【实战分享】我用Flutter为小餐馆开发的点餐系统
flutter
w139548564223 小时前
在鸿蒙平台使用 sqlite3.dart 插件
华为·sqlite·harmonyos
开心-开心急了3 小时前
ai + fluent_ui 实现自定义winUI风格窗口
flutter·ui
4 小时前
鸿蒙——布局——相对布局
华为·harmonyos·
2501_946230984 小时前
Cordova&OpenHarmony维修记录管理指南
安全·harmonyos
儿歌八万首4 小时前
Flutter自定义组件: 为横向列表自定义“进度条”式滚动指示器
flutter
w139548564225 小时前
在鸿蒙平台使用 sqlite3 插件
华为·sqlite·harmonyos