Flutter日志管理插件nd_logs的使用

Flutter日志管理插件nd_logs的使用

nd_logs 是一个为 Flutter/Dart 应用程序构建的日志解决方案,完全用 Dart 编写。

注意:目前该插件仅在 Android 和 iOS 平台上进行了测试。基本的 Web 支持也已添加。但是,由于 Web 应用无法像原生应用一样访问文件系统,因此 Web 平台的日志记录是会话级别的,并且只有在调用导出方法时才会保存到下载目录


开始使用

首先,确保在应用程序启动时初始化 WidgetsFlutterBinding 并调用 NDLogs.setupLogger() 方法:

WidgetsFlutterBinding.ensureInitialized();
await NDLogs.setupLogger();

接下来,可以通过简单的调用向日志中添加记录:

NDLogs.logThis("My first log!");

要导出日志文件,可以使用以下代码:

final logFilePath = await NDLogs.exportLogFile();

如果需要清除日志,可以调用以下方法:

await NDLogs.clearLogs();

完整示例代码

以下是完整的示例代码,展示了如何使用 nd_logs 插件记录日志并导出日志文件。

import 'dart:async';
import 'dart:developer';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:nd_logs/base/log_types.dart';
import 'package:nd_logs/nd_logs.dart';

void main() async {
  // 初始化 Flutter 绑定并设置日志记录器
  WidgetsFlutterBinding.ensureInitialized();
  await NDLogs.setupLogger(recordHTML: true);

  // 使用 runZonedGuarded 捕获未处理异常并记录错误
  runZonedGuarded(
    () => runApp(const MyApp()),
    (error, stack) async {
      await NDLogs.logErrorWithStacktrace(
        error,
        stack,
        paramsTracking: {
          "name": "Andi",
          "counter": "Unable to comply",
        },
      );
    },
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
      // 记录日志并附加参数
      NDLogs.logThis(
        "Counter value = $_counter",
        paramsTracking: {
          "name": "Andi",
          "counter": _counter.toString(),
        },
      );
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        actions: [
          // 导出日志按钮
          IconButton(
            icon: const Icon(Icons.import_export),
            onPressed: () => _exportLogs(),
          ),
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text('You have pushed the button this many times:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }

  Future<void> _exportLogs() async {
    // 记录导出日志的操作
    await NDLogs.logThis(
      "Exporting Logs",
      logType: LogType.warning,
    );

    // 导出日志文件路径
    final path = await NDLogs.exportLogFile();

    // 打印日志文件路径
    debugPrint("File found at $path");

    // 读取并打印日志文件内容
    final content = await File(path).readAsString();
    log(content);

    // 清除所有日志
    await NDLogs.clearLogs();
  }
}

更多关于Flutter日志管理插件nd_logs的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日志管理插件nd_logs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nd_logs 是一个用于 Flutter 应用的日志管理插件,它可以帮助开发者更好地管理和记录应用中的日志信息。以下是 nd_logs 的基本使用步骤和示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 nd_logs 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  nd_logs: ^1.0.0  # 请使用最新版本

然后,运行 flutter pub get 来获取依赖。

2. 初始化日志管理器

在你的 Flutter 应用中,通常需要在 main.dart 文件中初始化 nd_logs 日志管理器。

import 'package:flutter/material.dart';
import 'package:nd_logs/nd_logs.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化日志管理器
  NdLogs.initialize(
    logLevel: LogLevel.debug, // 设置日志级别
    logToConsole: true,      // 是否输出到控制台
    logToFile: true,         // 是否输出到文件
    logDirectory: 'logs',    // 日志文件存放目录
  );

  runApp(MyApp());
}

3. 记录日志

在你的应用代码中,你可以使用 NdLogs 来记录不同级别的日志信息。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ND Logs Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 记录不同级别的日志
              NdLogs.debug('This is a debug message');
              NdLogs.info('This is an info message');
              NdLogs.warning('This is a warning message');
              NdLogs.error('This is an error message');
            },
            child: Text('Log Messages'),
          ),
        ),
      ),
    );
  }
}

4. 查看日志

如果启用了 logToFile,日志将被保存到指定的目录中。你可以通过文件系统查看这些日志文件。

5. 日志级别

nd_logs 支持多种日志级别,包括:

  • LogLevel.debug: 调试信息
  • LogLevel.info: 常规信息
  • LogLevel.warning: 警告信息
  • LogLevel.error: 错误信息

你可以通过 NdLogs.initialize 方法设置日志级别,只有高于或等于该级别的日志才会被记录。

6. 自定义日志格式

nd_logs 允许你自定义日志的格式。你可以在初始化时通过 logFormatter 参数来指定自定义的日志格式。

NdLogs.initialize(
  logLevel: LogLevel.debug,
  logToConsole: true,
  logToFile: true,
  logDirectory: 'logs',
  logFormatter: (level, message) {
    return '${DateTime.now()} [$level] $message';
  },
);

7. 日志文件管理

你可以通过 NdLogs 提供的方法来管理日志文件,例如删除旧的日志文件或清空日志目录。

// 删除所有日志文件
NdLogs.clearLogs();

// 删除超过指定天数的日志文件
NdLogs.deleteOldLogs(days: 7);

8. 日志上传

nd_logs 还支持将日志文件上传到服务器。你可以使用 NdLogs.uploadLogs 方法来实现日志上传。

NdLogs.uploadLogs(
  url: 'https://your-server.com/upload-logs',
  headers: {'Authorization': 'Bearer your-token'},
);
回到顶部