MyLogger

MyLogger 是一个由 Flutter 开发的 Flogs 包的改进分支,它提供快速简单的日志记录解决方案。所有日志都保存在数据库中,可以导出为文本文件。

概述

MyLogger 使用 Dart 编写。日志保存在 Sembast 数据库中,该数据库可以导出到文档目录并上传到服务器。

当开发者想要分析应用内的用户活动时,日志非常有用。很多时候我们想记录一组数据来分析特定的活动。例如:

  • 位置(GPS 坐标),
  • 设备信息,
  • 网络请求
  • 等等。

这有助于我们快速识别和修复在生产环境中难以调试的问题。MyLogger 提供了将这些数据集记录到数据库并按不同过滤器获取的功能。

特点

  1. 按不同级别记录日志(DEBUG、TRACE、INFO、WARNING、ERROR、SEVERE、FATAL)
  2. 将日志保存到数据库
  3. 将日志导出到文件
  4. 轻松获取或删除日志
  5. 支持日志过滤
  6. 支持自定义时间戳
  7. 支持自定义数据类型日志记录
  8. 支持自定义日志格式
  9. 支持加密

将此包用作库

1. 依赖它

将此添加到您的包的pubspec.yaml文件中

dependencies:
  my_logger: ^1.0.0

2. 安装它

您可以从命令行安装包

使用 Flutter

$ flutter packages get

或者,您的编辑器可能支持 flutter packages get。请查看您编辑器的文档了解更多信息。

3. 导入它

现在,在您的 Dart 代码中,您可以使用

import 'package:my_logger/logger.dart';

如何使用

日志文件会导出到存储目录,因此首先将这些权限添加到项目的 manifest 文件中非常重要。

Android

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

iOS

<key>NSPhotoLibraryAddUsageDescription</key>
<string>MyLogger would like to save photos from the app to your gallery</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>MyLogger would like to access your photo gallery for uploading images to the app</string>

要保存日志,只需调用下面提到的任何一个方法即可。

    MyLogger.trace("My trace log"); 

    MyLogger.debug("My debug log");

    MyLogger.info("My info log");

    MyLogger.warning("My warning log");

    MyLogger.error("My error log");

    MyLogger.severe("My severe log");

    MyLogger.fatal("My fatal log");

    MyLoggerlog(
      className: "HomePage",
      methodName: "_buildRow1",
      text: "My severe log with exception and stacktrace",
      type: LogLevel.SEVERE, 
      exception: Exception("This is an Exception!"),
      stacktrace: StackTrace.current,
    );

    MyLoggerlog(
      className: "HomePage",
      methodName: "_buildRow1",
      text: "My severe log with dataLogType",
      type: LogLevel.SEVERE,
      dataLogType: DataLogType.DEVICE,
    );

可用方法

MyLogger 提供了许多其他用于保存、过滤或获取日志的方法。下面是所有这些方法的列表:

获取日志

MyLogger.logs.getAll();   // Get all saved logs
MyLogger.logs.getLastHour();   // Get all saved logs for last hour

// Get logs by LogFilter:
MyLogger.logs.getByFilter(
  LogFilter(
    startDateTime: DateTime(2019), 
    endDateTime: DateTime(2020), 
    dataLogsType: [DataLogType.NETWORK],
    logLevels: [LogLevel.ERROR, LogLevel.WARNING],
  ),  
);

// LogFilters also have some named constructors:
MyLogger.logs.getByFilter(LogFilter.last24Hours());

写入日志

MyLogger.logs.write(Log log);  // Save your own Log object

删除日志

MyLogger.logs.deleteAll();   // Delete all saved logs
MyLogger.logs.deleteLastHour();   // Delete all saved logs for last hour

// Delete logs by LogFilter:
MyLogger.logs.deleteByFilter(
  LogFilter(
    startDateTime: DateTime(2019), 
    endDateTime: DateTime(2020), 
    dataLogsType: [DataLogType.NETWORK],
    logLevels: [LogLevel.ERROR, LogLevel.WARNING],
  ),  
);

导出日志

File fileExport = await MyLogger.logs.export(
  fileName: "export-all-logs",
  exportType: FileType.TXT,
  filter: LogFilter.last24Hours(),
);

更改配置

    LogConfig config = MyLogger.config
      ..outputFormat = "{{level}} {{time}} - {{message}}"
      ..dataLogTypeValues = DataLogType.values
      ..encryption = EncryptionType.XXTEA
      ..encryptionKey = encryptionKey
      ..timestampFormat = TimestampFormat.DEFAULT;

    MyLogger.applyConfig(config);

GitHub

查看 Github