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
相关推荐
lichong9517 小时前
Android studio release 包打包配置 build.gradle
android·前端·ide·flutter·android studio·大前端·大前端++
旧时光_8 小时前
第3章:基础组件 —— 3.6 进度指示器
flutter
旧时光_10 小时前
第3章:基础组件 —— 3.3 图片及ICON
flutter
GISer_Jing11 小时前
跨端框架对决:React Native vs Flutter深度对比
flutter·react native·react.js
猪哥帅过吴彦祖15 小时前
Flutter 从入门到精通:深入 Navigator 2.0 - GoRouter 路由完全指南
android·flutter·ios
恋猫de小郭16 小时前
来了解一下,为什么你的 Flutter WebView 在 iOS 26 上有点击问题?
android·前端·flutter
你听得到111 天前
肝了半个月,我用 Flutter 写了个功能强大的图片编辑器,告别image_cropper
android·前端·flutter
旧时光_1 天前
第3章:基础组件 —— 3.2 按钮
flutter
旧时光_2 天前
第3章:基础组件 —— 3.1 文本及样式
flutter
旧时光_2 天前
第2章:第一个Flutter应用 —— 2.8 Flutter异常捕获
flutter