Flutter日志管理插件the_logger的使用

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

Flutter日志管理插件the_logger的使用

TheLogger 是一个用于Flutter应用的模块化日志库,提供了丰富的功能来管理和记录日志。

特性

  • 彩色控制台日志
  • 数据库日志记录
  • 自定义日志
  • 会话管理
  • 导出压缩文件中的日志
  • 灵活的日志过滤和保留策略
  • 隐藏敏感数据的能力
  • 控制台日志的自定义颜色方案
  • 解析和美化打印日志中的JSON字符串

入门指南

首先,在 pubspec.yaml 文件中添加 the_loggerlogging 依赖:

dependencies:
  flutter:
    sdk: flutter
  the_logger: ^latest_version
  logging: ^latest_version

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

使用方法

初始化 Logger

在您的应用程序中导入包并初始化 TheLogger

import 'package:the_logger/the_logger.dart';
import 'package:logging/logging.dart';

void main() async {
  await TheLogger.i().init();
  runApp(const MyApp());
}

记录日志

通过创建一个 Logger 实例来记录不同级别的日志:

final _log = Logger('MyHomePage');
_log
  ..finest('some finest log')
  ..info('some info log')
  ..warning('some warning log')
  ..severe('some severe log');

日志保留策略

您可以定义日志保留策略:

await TheLogger.i().init(retainStrategy: {
  Level.ALL: 200,  // 所有记录在200个会话后删除
  Level.INFO: 100,  // INFO级别及以上的记录保留300个会话
  Level.SEVERE: 50,   // SEVERE级别及以上的记录保留350个会话
});

新会话管理

可以通过以下方式手动开始新会话:

TheLogger.i().startSession();

自定义日志输出

可以禁用控制台日志或数据库日志:

await TheLogger.i().init(
  consoleLogger: false,
  dbLogger: false,
);

导出日志到文件

将所有日志写入压缩文件:

final filePath = await TheLogger.i().writeAllLogsToJson();
print('Log file path: $filePath');

示例 Demo

以下是一个完整的示例程序,展示了如何在Flutter应用中使用 TheLogger

import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:the_logger/the_logger.dart';
import 'package:flutter/services.dart';

void main() async {
  await TheLogger.i().init();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  late final AppLifecycleListener _listener;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    _listener = AppLifecycleListener(onStateChange: _onStateChanged);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    _listener.dispose();
    super.dispose();
  }

  void _onStateChanged(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      TheLogger.i().startSession();
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final _log = Logger('MyHomePage');

  void printLogs() {
    _log
      ..finest('some finest log')
      ..info('some info log')
      ..warning('some warning log')
      ..severe('some severe log');
  }

  void emulateError() {
    try {
      throw Exception('Some error');
    } catch (e, s) {
      _log.severe('Some severe error', e, s);
    }
  }

  void logJson() {
    _log.fine(
      '{"messageKey": "value"}',
      '{"errorKey": "value"}',
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('TheLogger Demo')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            ElevatedButton(onPressed: printLogs, child: Text('Print Logs')),
            ElevatedButton(onPressed: emulateError, child: Text('Emulate Error')),
            ElevatedButton(onPressed: logJson, child: Text('Log JSON')),
          ],
        ),
      ),
    );
  }
}

以上代码展示了如何集成 TheLogger 到一个简单的Flutter应用中,并提供了一些基本的日志记录功能。您可以根据需要进一步扩展和定制这些功能。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用the_logger插件进行日志管理的示例代码。这个插件可以帮助你更好地管理和记录应用程序中的日志信息。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  the_logger: ^2.0.0  # 请注意版本号,根据实际情况使用最新版本

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

2. 配置Logger

在你的应用程序的入口文件(通常是main.dart)中,配置Logger实例:

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

void main() {
  // 配置Logger
  final Logger log = Logger(
    printer: PrettyPrinter(
      methodCount: 2, // 打印堆栈跟踪的深度
      errorMethodCount: 8, // 错误堆栈跟踪的深度
      lineLength: 120, // 每行的最大长度
      colors: true, // 是否使用颜色
      printEmojis: true, // 是否打印表情符号
      printTime: true, // 是否打印时间戳
    ),
  );

  // 将Logger设置为全局实例(可选)
  Log.logger = log;

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Logger Example'),
        ),
        body: Center(
          child: LogButton(),
        ),
      ),
    );
  }
}

3. 使用Logger记录日志

现在你可以在你的应用程序中的任何地方使用Logger来记录日志。例如,在一个简单的按钮点击事件中:

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

class LogButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // 记录不同级别的日志
        Log.d('这是一条调试日志');
        Log.i('这是一条信息日志');
        Log.w('这是一条警告日志');
        Log.e('这是一条错误日志');
      },
      child: Text('记录日志'),
    );
  }
}

4. 输出日志到控制台

当你运行你的应用程序并点击按钮时,你应该能够在控制台中看到类似如下的日志输出:

🔥  D/flutter ( 5123): 这是一条调试日志
🔥  I/flutter ( 5123): 这是一条信息日志
🔥  W/flutter ( 5123): 这是一条警告日志
🔥  E/flutter ( 5123): 这是一条错误日志

5. 自定义日志输出(可选)

你还可以自定义日志的输出方式,比如将日志写入文件。为此,你可以扩展Printer类。下面是一个简单的示例,展示如何将日志写入文件:

import 'dart:io';
import 'package:the_logger/the_logger.dart';

class FilePrinter extends Printer {
  final File logFile;

  FilePrinter(this.logFile);

  @override
  void log(Level level, String message, {StackTrace? stackTrace, int methodCount = 1}) {
    // 格式化日志信息
    String formattedMessage = format(level, message, stackTrace: stackTrace, methodCount: methodCount);
    // 将日志信息写入文件
    logFile.writeAsStringSync(formattedMessage + '\n', mode: FileMode.append);
    // 同时输出到控制台(可选)
    print(formattedMessage);
  }
}

// 使用示例
void main() async {
  final logFile = File('app_log.txt');
  await logFile.create(recursive: true);

  final Logger log = Logger(
    printer: FilePrinter(logFile),
  );

  Log.logger = log;

  runApp(MyApp());
}

这个示例展示了如何将日志信息同时写入文件和控制台。你可以根据需要进一步定制日志的输出格式和目标。

回到顶部