UME: logger功能

695 阅读2分钟

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

功能查看

今天我们看下logger功能是如何实现的, 老规矩先来看看功能是什么样的,当我们点击debugprint时,下方会打印出我们打印的信息

1.png

代码查看

今天的代码在flutter_ume_kit_console包中,这里做了个方法交换,将debugPrint方法赋值给了_originalDebugPrint,然后重新写了一个debugPrint,在新的debugPrint中将message添加到stream中,然后在调用_originalDebugPrint

static redirectDebugPrint() {
  if (_originalDebugPrint != null) return;
  _originalDebugPrint = debugPrint;
  debugPrint = (String? message, {int? wrapWidth}) {
    ConsoleManager.streamController!.sink.add(message);
    if (_originalDebugPrint != null) {
      _originalDebugPrint!(message, wrapWidth: wrapWidth);
    }
  };
}

再来看下流中做了什么,在流中判断如果data没超过最大条数就添加进去,超过了就删除最后一条,这样我们就得到了所有,打印的数据,

_logStreamController!.stream.transform(transformer).listen((value) {
  if (_logData.length < maxLine) {
    _logData.addFirst(value);
  } else {
    _logData.removeLast();
  }
});

流数据

value = [2021-11-09 20:21:48.215855, statement]
    item1 = 2021-11-09 20:21:48.215855
    item2 =statement

现在我们回到console_panel.dart中看看data如何显示出来的,通过富文本展示时间和打印数据

RichText(
  text: TextSpan(children: [
    TextSpan(
        text: _dateTimeString(index),
        style: TextStyle(
          color: Colors.white60,
          fontFamily: 'Courier',
          fontSize: 16,
          fontWeight: FontWeight.w400,
        )),
    TextSpan(
        text:
            '${_logList[_logList.length - index - 1].item2}',
        style: TextStyle(
          color: Colors.white,
          fontFamily: 'Courier',
          fontSize: 16,
          fontWeight: FontWeight.w400,
        )),
  ]),
)

至于多种样式的时间格式显示,则是写了一个枚举进行判断当前是哪种格式的时间,进行返回要显示的格式,代码就不展示了

该工具只能通过debugPrint进行打印,不能使用print,因为是对debugPrint进行插桩,所以只能记录debugPrint的数据

另外看了一下debugPrint,可以自定义打印信息,而print则不能自定义打印信息,之后如果有时间的话会写个打印输出的小工具,敬请期待,嘿嘿

结语

好了今天的源码查看就到这了, 作为Flutter届的一个小学生,希望大家多多指教,有问题的地方一起讨论