Flutter日志记录插件qz_log的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter日志记录插件qz_log的使用

Qz_log

QzLog


在使用QzLog插件之前,需要在androidManifest.xml中配置以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>

这些权限是为了访问和操作生成的日志文件。

此外,在androidManifest.xml中,还需要在application标签内添加以下键:

<application
        ...
        android:requestLegacyExternalStorage="true"

如何使用它?

添加依赖

首先,在你的pubspec.yaml文件中添加QzLog作为依赖项。

dependencies:
  qz_log: ^版本号

然后,在你的Dart文件中导入该库:

import 'package:qz_log/qz_log.dart';

插入或记录日志

使用insertLog函数来插入或记录日志:

await QzLog.insertLog(log: 'Test Log', exception: 'Function insert');

检查是否有日志记录

使用logExists函数来检查是否有日志记录在数据库中:

await QzLog.logExists();

导出日志文件

使用exportLogs函数来导出日志文件。文件将保存在设备的Downloads/QzLog文件夹中:

await QzLog.exportLogs();

删除所有日志记录

使用deleteAll函数来删除数据库中所有的日志记录以及生成的文件:

await QzLog.deleteAll();

删除所有导出的日志文件

使用deleteAllFiles函数来删除设备存储中的所有导出文件:

await QzLog.deleteAllFiles();

仅删除数据库中的日志记录

使用deleteLogFromDatabase函数来删除数据库中的日志记录并保留导出的文件:

await QzLog.deleteLogFromDatabase();

检查并请求存储权限

使用checkAndRequestPermission函数来检查并请求存储权限:

await QzLog.checkAndRequestPermission();

示例代码

以下是使用QzLog插件的完整示例代码:

import 'dart:developer';

import 'package:flutter/material.dart';

import 'package:qz_log/qz_log.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'QzLog',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Home Page'),
    );
  }
}

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

  final String title;

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

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

  final int _secondsInformation = 3;

  final _infColor = Colors.amber;
  final _errorColor = Colors.red;
  final _sucessColor = Colors.green;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async => await _insertLog(),
              child: const Text('Insert Log'),
            ),
            ElevatedButton(
              onPressed: () async => await _checkLogExists(),
              child: const Text('Check log exists'),
            ),
            ElevatedButton(
              onPressed: () async => await _exportLogs(),
              child: const Text('Export Log'),
            ),
            ElevatedButton(
              onPressed: () async => await _deleteAll(),
              child: const Text('Delete All Logs'),
            ),
            ElevatedButton(
              onPressed: () async => await _deleteLogFromDatabase(),
              child: const Text('Delete log from Database'),
            ),
            ElevatedButton(
              onPressed: () async => await _deleteAllFiles(),
              child: const Text('Delete All Files Logs'),
            ),
            ElevatedButton(
              onPressed: () async => await _checkAndReuqestPermission(),
              child: const Text('Check and Request Permissions'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _insertLog() async {
    try {
      _incrementCounter();
      await QzLog.insertLog(
          log: 'Test Log $_counter', exception: 'Function insert');
      _showSnack('Insert success', null);
    } catch (e) {
      log('Error to insert log: $e');
    }
  }

  Future<void> _checkLogExists() async {
    try {
      final _response = await QzLog.logExists();
      if (_response) {
        _showSnack('Exists logs from external storage', null);
        return;
      }
      _showSnack('Not exists logs from external storage', _errorColor);
    } catch (e) {
      log('Error to check log: $e');
    }
  }

  Future<void> _exportLogs() async {
    try {
      final _response = await QzLog.exportLogs();
      if (_response != null) {
        return _showSnack('Export success', null);
      }
      _showSnack('Log is empty from database', _infColor);
    } catch (e) {
      log('Error to export log: $e');
      _showSnack('Error to export logs', _errorColor);
    }
  }

  Future<void> _deleteAll() async {
    try {
      await QzLog.deleteAll();
      _showSnack('Delete all success', null);
    } catch (e) {
      log('Error to delete all logs: $e');
    }
  }

  Future<void> _deleteLogFromDatabase() async {
    try {
      await QzLog.deleteLogFromDatabase();
      _showSnack('Delete log from database success', null);
    } catch (e) {
      log('Error to delete log from database: $e');
    }
  }

  Future<void> _deleteAllFiles() async {
    try {
      await QzLog.deleteAllFiles();
      _showSnack('Delete all files success', null);
    } catch (e) {
      log('Error to delete all files logs: $e');
    }
  }

  Future<void> _checkAndReuqestPermission() async {
    try {
      await QzLog.checkAndRequestPermission();
      _showSnack('Check and request success', null);
    } catch (e) {
      log('Error to check and request permission: $e');
    }
  }

  void _showSnack(String message, Color? color) {
    ScaffoldMessenger.of(context).removeCurrentSnackBar();
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text(
          message,
        ),
        backgroundColor: color ?? _sucessColor,
        duration: Duration(
          seconds: _secondsInformation,
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用qz_log插件进行日志记录的代码案例。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加qz_log依赖:

dependencies:
  flutter:
    sdk: flutter
  qz_log: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化日志记录器

在你的Flutter应用的入口文件(通常是main.dart)中,初始化QzLog实例。

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

void main() {
  // 初始化QzLog
  QzLog.init(
    level: QzLogLevel.debug, // 设置日志级别
    filePath: 'logs/app.log', // 设置日志文件路径
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 日志记录示例'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

3. 使用日志记录功能

在需要记录日志的地方,使用QzLog提供的方法。例如:

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () {
            QzLog.d('这是一条调试日志');
            QzLog.i('这是一条信息日志');
            QzLog.w('这是一条警告日志');
            QzLog.e('这是一条错误日志');
          },
          child: Text('记录日志'),
        ),
      ],
    );
  }
}

4. 查看日志

qz_log会将日志写入到指定的文件路径(在这个例子中是logs/app.log)。你可以在设备或模拟器上通过文件管理器查看该文件,或者使用ADB等工具从Android设备中拉取日志文件。

5. 清理日志(可选)

如果你需要在某个时刻清理日志文件,可以使用QzLog.clearLogs()方法:

QzLog.clearLogs().then((_) {
  print('日志文件已清理');
});

完整示例代码

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

void main() {
  QzLog.init(
    level: QzLogLevel.debug,
    filePath: 'logs/app.log',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 日志记录示例'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () {
            QzLog.d('这是一条调试日志');
            QzLog.i('这是一条信息日志');
            QzLog.w('这是一条警告日志');
            QzLog.e('这是一条错误日志');
          },
          child: Text('记录日志'),
        ),
        ElevatedButton(
          onPressed: () {
            QzLog.clearLogs().then((_) {
              print('日志文件已清理');
            });
          },
          child: Text('清理日志'),
        ),
      ],
    );
  }
}

这个示例展示了如何在Flutter应用中使用qz_log插件进行日志记录。你可以根据需要调整日志级别和文件路径。

回到顶部