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
相关推荐
不爱吃糖的程序媛6 分钟前
Flutter-OH 升级指导
flutter
恋猫de小郭2 小时前
Android 禁止侧载将正式实施,需要等待 24 小时冷静期
android·flutter·harmonyos
FFF-X3 小时前
解决 Flutter Gradle 下载报错:修改默认 distributionUrl
flutter
程序员Ctrl喵1 天前
异步编程:Event Loop 与 Isolate 的深层博弈
开发语言·flutter
前端不太难1 天前
Flutter 如何设计可长期维护的模块边界?
flutter
小蜜蜂嗡嗡1 天前
flutter列表中实现置顶动画
flutter
始持1 天前
第十二讲 风格与主题统一
前端·flutter
始持1 天前
第十一讲 界面导航与路由管理
flutter·vibecoding
始持1 天前
第十三讲 异步操作与异步构建
前端·flutter
新镜1 天前
【Flutter】 视频视频源横向、竖向问题
flutter