Flutter日志记录插件mini_logger的使用

Flutter日志记录插件mini_logger的使用

mini_log 是一个用于Flutter应用的日志记录插件。通过该插件,开发者可以方便地记录不同级别的日志,并将这些日志存储在本地数据库中。

开始使用

安装插件

首先,在你的pubspec.yaml文件中添加对mini_logger插件的依赖:

dependencies:
  mini_logger: ^版本号

然后运行flutter pub get以安装插件。

初始化插件

在应用启动时初始化插件。你可以通过调用L.init()方法来配置插件,指定标签名、是否使用SQLite存储以及日志级别等参数。

void main() {
  L.init(MiniLoggerConfig(
    tag: 'mini_logger_example',
    withSQLite: true,
    upLogEvent: upLog,
    minSQLiteLevel: MiniLoggerLevelEnum.V,
  ));
  runApp(MyApp());
}

示例代码

下面是一个完整的示例代码,展示了如何使用mini_logger插件进行日志记录和查询。

import 'dart:async';
import 'dart:math' as math;

import 'package:flutter/material.dart';
import 'package:mini_logger/mini_logger.dart';
import 'package:english_words/english_words.dart';

void main() {
  L.init(MiniLoggerConfig(
    tag: 'mini_logger_example',
    withSQLite: true,
    upLogEvent: upLog,
    minSQLiteLevel: MiniLoggerLevelEnum.V,
  ));
  runApp(MyApp());
}

Future<bool> upLog(MiniLoggerModel log) async {
  L.d("正在提交日志:$log", withSQLite: false, withUp: false, tag: '上传日志');
  return true;
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: '日志测试'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController _controller = TextEditingController();
  QueryLogParameter _parameter = QueryLogParameter();

  List<MiniLoggerModel> _list = [];

  int _counter = 0;

  [@override](/user/override)
  void initState() {
    _query();
    _controller.addListener(() {
      _parameter.searchKey = _controller.text.trim();
      _query();
    });
    super.initState();
  }

  void _add() async {
    int index = (_counter++) % 5;
    var log =
        generateWordPairs().take(math.Random().nextInt(50) + 20).join(' ');
    switch (index) {
      case 0:
        L.v(log); // 记录一条详细的日志
        break;
      case 1:
        L.d(log, withUp: math.Random().nextBool()); // 记录一条调试日志,并根据随机值决定是否上报
        break;
      case 2:
        L.i(log, withSQLite: math.Random().nextBool()); // 记录一条信息日志,并根据随机值决定是否存储到SQLite
        break;
      case 3:
        L.w(log, withUp: false); // 记录一条警告日志,并不上报
        break;
      case 4:
        L.e(log, withSQLite: true); // 记录一条错误日志,并存储到SQLite
        break;
    }
    _query();
  }

  void _delete() async {
    int sum = await L.deleteLog(QueryLogParameter(maxTime: DateTime.now()));
    print('删除了$sum条记录');
    _query();
  }

  void _query() async {
    _list = await L.queryLogs(_parameter);
    if (mounted) setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Card(
          child: Padding(
            padding: const EdgeInsets.only(left: 8),
            child: TextField(
              controller: _controller,
              decoration: InputDecoration(
                contentPadding: EdgeInsets.only(top: 0.0),
                hintText: '日志测试',
                border: InputBorder.none,
              ),
            ),
          ),
        ),
        centerTitle: true,
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: ListView.builder(
          itemBuilder: (ctx, index) {
            if (index.isOdd) return Divider();
            MiniLoggerModel _log = _list[(index / 2).floor()];
            return Text(_log.toString(), style: TextStyle(color: _log.level.color));
          },
          itemCount: _list.length * 2,
        ),
      ),
      floatingActionButton: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          FloatingActionButton(
            onPressed: _delete,
            tooltip: 'delete',
            child: Icon(Icons.delete),
            backgroundColor: Colors.red,
          ),
          SizedBox(height: 20),
          FloatingActionButton(
              onPressed: _add, tooltip: 'add', child: Icon(Icons.add))
        ],
      ),
    );
  }

  String getDateTimeStr(DateTime time) {
    return "${time.month.toString().padLeft(2, '0')}-${time.day.toString().padLeft(2, '0')} ${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}:${time.second.toString().padLeft(2, '0')}";
  }
}

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

1 回复

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


mini_logger 是一个轻量级的 Flutter 日志记录插件,它可以帮助你在 Flutter 应用中轻松地记录和管理日志。以下是如何使用 mini_logger 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  mini_logger: ^1.0.0  # 请检查最新的版本号

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

2. 初始化日志记录器

在你的 Dart 文件中导入 mini_logger 包,并初始化日志记录器:

import 'package:mini_logger/mini_logger.dart';

void main() {
  // 初始化日志记录器
  MiniLogger.initialize(
    logLevel: LogLevel.debug,  // 设置日志级别
    enableFileLogging: true,   // 是否启用文件日志记录
    logDirectory: 'logs',      // 日志文件存储目录
  );

  runApp(MyApp());
}

3. 记录日志

你可以使用 MiniLogger 提供的不同方法来记录不同级别的日志:

MiniLogger.debug('This is a debug message');
MiniLogger.info('This is an info message');
MiniLogger.warning('This is a warning message');
MiniLogger.error('This is an error message');

4. 日志级别

mini_logger 支持以下日志级别:

  • LogLevel.debug: 调试信息,通常用于开发阶段。
  • LogLevel.info: 一般信息,用于记录应用的正常运行状态。
  • LogLevel.warning: 警告信息,表示可能存在问题,但不会导致应用崩溃。
  • LogLevel.error: 错误信息,表示发生了错误,可能会影响应用的正常运行。

5. 文件日志记录

如果你启用了文件日志记录 (enableFileLogging: true),日志将被写入到指定的目录中。你可以通过 logDirectory 参数指定日志文件的存储目录。

6. 查看日志

你可以在应用的存储目录中查看生成的日志文件。日志文件通常以日期命名,例如 2023-10-01.log

7. 自定义日志格式

mini_logger 允许你自定义日志的格式。你可以通过 MiniLogger.initialize 方法中的 formatter 参数来指定自定义的日志格式。

MiniLogger.initialize(
  logLevel: LogLevel.debug,
  formatter: (LogLevel level, String message) {
    return '[${DateTime.now()}] [$level] $message';
  },
);

8. 禁用日志记录

在发布版本中,你可能希望禁用日志记录以保护用户隐私或提高性能。你可以通过设置 logLevelLogLevel.none 来禁用日志记录:

MiniLogger.initialize(
  logLevel: LogLevel.none,
);

9. 清理日志文件

mini_logger 还提供了清理日志文件的功能。你可以通过 MiniLogger.cleanLogs 方法来删除旧的日志文件:

MiniLogger.cleanLogs(days: 7);  // 删除7天前的日志文件
回到顶部