MyLogger
MyLogger 是一个由 Flutter 开发的 Flogs 包的改进分支,它提供快速简单的日志记录解决方案。所有日志都保存在数据库中,可以导出为文本文件。
概述
MyLogger 使用 Dart 编写。日志保存在 Sembast 数据库中,该数据库可以导出到文档目录并上传到服务器。
当开发者想要分析应用内的用户活动时,日志非常有用。很多时候我们想记录一组数据来分析特定的活动。例如:
- 位置(GPS 坐标),
- 设备信息,
- 网络请求
- 等等。
这有助于我们快速识别和修复在生产环境中难以调试的问题。MyLogger 提供了将这些数据集记录到数据库并按不同过滤器获取的功能。
特点
- 按不同级别记录日志(DEBUG、TRACE、INFO、WARNING、ERROR、SEVERE、FATAL)
- 将日志保存到数据库
- 将日志导出到文件
- 轻松获取或删除日志
- 支持日志过滤
- 支持自定义时间戳
- 支持自定义数据类型日志记录
- 支持自定义日志格式
- 支持加密
将此包用作库
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);