[Flutter] log 日志太长,打印不完整问题

1,782 阅读1分钟

题记

flutter的日志有这么一个问题,在android studio里面,如果太长了(大概1000多个字符)打印不全问题。我用的日志组件是 logger。如果有小伙伴和我一样遇到这个问题的话可以看一看。

解决方案

继承logger组件的PrettyPrinter类,重写stringifyMessage方法,然后遇到太长了就换好。为了好看,如果打印的消息里原本就有换行符就重新计算长度。


  • 1、自定义支持长文本的log打印器

///自定义支持长文本log的打印器
class LongPrettyPrinter extends PrettyPrinter {
  final int warpLen; //控制换行个数

  @override
  LongPrettyPrinter({
    this.warpLen = 1000,
    stackTraceBeginIndex = 0,
    methodCount = 2,
    errorMethodCount = 8,
    lineLength = 120,
    colors = true,
    printEmojis = true,
    printTime = false,
    noBoxingByDefault = false,
  }) : super(
          stackTraceBeginIndex: stackTraceBeginIndex,
          methodCount: methodCount,
          errorMethodCount: errorMethodCount,
          lineLength: lineLength,
          colors: colors,
          printEmojis: printEmojis,
          printTime: printTime,
          noBoxingByDefault: noBoxingByDefault,
        );

  @override
  String stringifyMessage(message) {
    var msg = super.stringifyMessage(message);
    var i = 0;
    var len = warpLen;
    var newStr = "";
    while (msg.length > i + len) {
      var next = i + len;
      var last = msg.indexOf("\n", i);
      if (last < i + 1 || last > next) {
        newStr += msg.substring(i, next) + "\n";
        i = next;
      } else {
        newStr += msg.substring(i, last);
        i = last;
      }
    }
    if (i + len > msg.length) {
      newStr += msg.substring(i);
    }
    return newStr;
  } 
}
  • 2、初始化logger的时候使用自己实现的打印类
Logger logger = Logger(printer: LongPrettyPrinter(methodCount: 2,warpLen:1000));

End