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
相关推荐
小 黄 鸡8 小时前
Flutter 面试必会知识点详解(从基础到进阶)
flutter·面试·职场和发展
大龄秃头程序员15 小时前
Flutter 最少代码验证:为什么子 Isolate 调原生,一定要先回到主 Isolate?
flutter
FungLeo16 小时前
成为全栈·Flutter App 篇·分类、标签与搜索:移动端内容发现
flutter·移动开发·标签·搜索·分类管理·成为全栈
m0_7381858217 小时前
Flutter 鸿蒙化实战:the_apple_sign_in 适配 OpenHarmony,Apple 登录
flutter·华为·harmonyos·鸿蒙
m0_7381858218 小时前
Flutter 鸿蒙化实战:umeng_analytics_plugin 适配 OpenHarmony,友盟统计
flutter·华为·harmonyos·鸿蒙
FungLeo19 小时前
成为全栈·Flutter App 篇·列表分页与下拉刷新:去重、失败保留和返回位置
flutter·移动开发·下拉刷新·分页加载·列表优化·成为全栈
大龄秃头程序员21 小时前
【从一道面试题入手】深入理解 Dart 事件循环调度机制
flutter
恋猫de小郭1 天前
Kotlin 2.5 的 Companion 改造,对 KMP 的重要升级
android·前端·flutter
程序员老刘2 天前
Flutter你看看人家RN
flutter·react native·ai编程
大龄秃头程序员2 天前
【Flutter Bloc 从 0 到 1】用最少代码跑通 Bloc
flutter