Flutter - 集成三方库:日志(logger)
日志
使用print
方法时,会提示
添加依赖
$ flutter pub add logger
下载依赖
$ flutter pub get
使用
打印
import 'package:logger/logger.dart';var logger = Logger();
logger.d("debug");
logger.e("error");
logger.i("info");
logger.f("fatal");
logger.w("warning");
logger.t("trace");
设置打印级别
/// The current logging level of the app.
/// All logs with levels below this level will be omitted.
/// 设置打印级别,低于level的不会被打印
Logger.level;
enum Level {all(0),('[verbose] is being deprecated in favor of [trace].')verbose(999),trace(1000),debug(2000),info(3000),warning(4000),error(5000),('[wtf] is being deprecated in favor of [fatal].')wtf(5999),fatal(6000),('[nothing] is being deprecated in favor of [off].')nothing(9999),off(10000),;final int value;const Level(this.value);
}
打印到文件
/// 使用 getApplicationDocumentsDirectory 需要
/// 添加 path_provider
/// flutter pub add path_provider
/// flutter pub ge
/// - `NSDocumentDirectory` on iOS and macOS.
/// - The Flutter engine's `PathUtils.getDataDirectory` API on Android.
Directory documentDir = await getApplicationDocumentsDirectory();
var logger = Logger(output: FileOutput(file: File("${documentDir.path}/log.txt")),
);
打印到控制台+文件
Directory documentDir = await getApplicationDocumentsDirectory();
FileOutput fileOutPut = FileOutput(file: File("${documentDir.path}/log.txt"),
);
ConsoleOutput consoleOutput = ConsoleOutput();
List<LogOutput> multiOutput = [fileOutPut, consoleOutput];
var logger = Logger(output: MultiOutput(multiOutput),
);
打印时间
Logger构造函数有个printer
参数可以指定输出格式
var logger = Logger(filter: null, // Use the default LogFilter (-> only log in debug mode)printer: PrettyPrinter(dateTimeFormat: DateTimeFormat.dateAndTime),output: MultiOutput(multiOutput),
);
打印过滤器
默认的过滤器(DevelopmentFilter)在debug模式下可以打印所有level >= Logger.level的日志,在Release模式下所有日志被忽略。
比如设置Release模式下只打印warning级别以上(含warning)的日志
class MyFilter extends LogFilter { bool shouldLog(LogEvent event) {if (event.level.value < Logger.level.value) {return false;}return true;}
}
...
const bool inProduction = bool.fromEnvironment("dart.vm.product");
if (inProduction) {Logger.level = Level.warning;
}
...ConsoleOutput consoleOutput = ConsoleOutput();List<LogOutput> multiOutput = [fileOutPut, consoleOutput];var logger = Logger(filter:MyFilter(), // Use the default LogFilter (-> only log in debug mode)printer: PrettyPrinter(dateTimeFormat: DateTimeFormat.dateAndTime),output: MultiOutput(multiOutput),
);logger.d("debug");
logger.e("error");
logger.i("info");
logger.f("fatal");
logger.w("warning");
logger.t("trace");
参考
- logger
- Flutter-文件系统目录和文件读写
- Flutter: How to show log output in console and automatically store it?
- Flutter中如何判断当前运行模式是Debug还是Release