日志
使用print
方法时,会提示

添加依赖
sh
$ flutter pub add logger
下载依赖
sh
$ flutter pub get
使用
打印
dart
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");

设置打印级别
dart
/// The current logging level of the app.
/// All logs with levels below this level will be omitted.
/// 设置打印级别,低于level的不会被打印
Logger.level;
dart
enum Level {
all(0),
@Deprecated('[verbose] is being deprecated in favor of [trace].')
verbose(999),
trace(1000),
debug(2000),
info(3000),
warning(4000),
error(5000),
@Deprecated('[wtf] is being deprecated in favor of [fatal].')
wtf(5999),
fatal(6000),
@Deprecated('[nothing] is being deprecated in favor of [off].')
nothing(9999),
off(10000),
;
final int value;
const Level(this.value);
}
打印到文件
dart
/// 使用 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")),
);
打印到控制台+文件
dart
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
参数可以指定输出格式
dart
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)的日志
dart
class MyFilter extends LogFilter {
@override
bool shouldLog(LogEvent event) {
if (event.level.value < Logger.level.value) {
return false;
}
return true;
}
}
dart
...
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");
