TheLogger

一个用于 Flutter 的模块化日志库。

特点

  • 多彩的控制台日志记录
  • 数据库日志记录
  • 自定义日志记录
  • 会话
  • 将日志导出为压缩文件
  • 灵活的日志过滤和保留策略

入门

要使用此软件包,请在您的pubspec.yaml文件中将the_loggerlogging添加为依赖项

用法

导入软件包

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

获取logger实例并初始化

await TheLogger.i().init();

然后您可以通过调用Logger方法来使用它

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

TheLogger是单例的,因此您可以在应用程序的任何地方获取相同的实例

final instance = TheLogger.i();

这应该尽早且仅在您的应用程序中进行一次。在第二次调用init()之前,您应该调用dispose()方法。

您可以为日志定义保留策略。例如

TheLogger.i().init(retainStrategy: {
  Level.ALL:      200,  // ALL records will be deleted after 200 sessions
  Level.INFO:     100,  // records with INFO and higher level retained for 300 sessions
  Level.SEVERE:   50,   // records with SEVERE and higher level retained for 350 sessions
});

日志按会话分隔。默认情况下,每次调用init()方法时,TheLogger都会启动一个新会话(但您可以将startNewSession: false传递给init()方法来更改此行为)。

TheLogger.i().init(startNewSession: false);

您可以手动启动一个新会话,方法是调用

TheLogger.i().startSession();

startSession()可以调用多次,例如当应用程序从后台恢复时(请参见示例)。

有一种方法可以附加会话开始日志消息,并附带自定义字符串(例如,您可以添加应用程序版本)或更改会话开始日志消息级别

TheLogger.i().init(
  sessionStartExtra: $appVersion,
  sessionStartLevel: Level.FINE, // default is Level.INFO
);

要启用或禁用控制台日志记录以及是否将日志存储在数据库中,请使用

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

通过提供回调函数consoleLoggerCallback,可以捕获将发送到控制台的日志

TheLogger.i().init(
  consoleLoggerCallback: (
      String message, {
      DateTime? time,
      int? sequenceNumber,
      int level = 0,
      String name = '',
      Zone? zone,
      Object? error,
      StackTrace? stackTrace,
  ) {
    // do something with the record
  },
);

您可以添加自定义日志记录器(例如用于将日志发送到服务器)

TheLogger.i().init(
  customLoggers: [
    remoteLogger,
    anotherLogger,
  ],
);

要将所有日志写入压缩文件,请调用writeAllLogsToJson方法

final filePath = await TheLogger.i().writeAllLogsToJson();

此方法返回一个包含日志的文件路径。您可以将此文件发送到服务器,要求用户发送给您,或对其进行任何您想要的操作。

出于调试目的,您可以从数据库中获取所有日志并清除数据库中的所有日志

final logsAsString = await TheLogger.i().getAllLogsAsString();
final logsAsList = await TheLogger.i().getAllLogs();
final logsAsMaps = await TheLogger.i().getAllLogsAsMaps();
final logsAsMaps = await TheLogger.i().clearAllLogs();

测试

此软件包包含其功能的几个单元测试。要运行测试,请使用以下命令

flutter test