Flutter - 集成三方库:日志(logger)

日志

使用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");

参考

  1. logger
  2. Flutter-文件系统目录和文件读写
  3. Flutter: How to show log output in console and automatically store it?
  4. Flutter中如何判断当前运行模式是Debug还是Release
相关推荐
君赏3 天前
棉宇宙 Flutter 热更新是如何落地的
flutter
恋猫de小郭3 天前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
zihan5183 天前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
ZFJ_张福杰4 天前
【Flutter】Flutter 中有哪些耗时操作?从 UI 卡顿到 Isolate 性能优化
flutter·性能优化·卡顿·isolate
sakiko_4 天前
Flutter:Dart学习笔记1:基础UI组件等
flutter
9765033354 天前
iOS 上架 4.3a 被拒【uniapp专讲】
flutter·ios·objective-c·uniapp·swift
传奇开心果编程4 天前
【Flutter入门练中学】第2课:布局系统
学习·flutter·ui
君赏5 天前
FlutterPatch:把 Shorebird 热更新的控制面搬回自己服务器
flutter
用户2181697049305 天前
Flutter tootip 轻量级提示
flutter
用户2181697049305 天前
Flutter 拖拽 Draggable DragTarget
flutter