TheLogger
一个用于 Flutter 的模块化日志库。
特点
- 多彩的控制台日志记录
- 数据库日志记录
- 自定义日志记录
- 会话
- 将日志导出为压缩文件
- 灵活的日志过滤和保留策略
入门
要使用此软件包,请在您的pubspec.yaml文件中将the_logger和logging添加为依赖项。
用法
导入软件包
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