flutter log4d 日志包的使用

文章目录

最近闲来无事,撸了一个日志插件,功能很简单

在开发机上开启一个服务端

然后客户端(不仅是 flutter,而是只要可以使用dart:io就可以)开启远程连接,然后就可以发送日志到服务端了

好处

这样的好处是,开发机可以实时接收到日志,并且保存到文件中

因为我们很多时候会发生日志超出一个长度(好像是 1000 个),然后在 console 中不能完整显示的问题,比如网络网文请求,如果响应的报文不完整就不能复制出完整的 json,有的错误不太好定位

使用这个插件后,就可以在开发机简单的通过命令保存日志,方便后续定位

只要你的客户端可以访问到服务端,这就能实现

开发过程

使用WebSocket连接,这个类在 dart 中依托于dart:io包,所以如果你是dart web,可能就用不了这个了,flutterdart vm中是没问题的

这个库支持使用 pub global, 配置 dart 和 pub 到环境变量后可以直接通过log4d在命令行中开启

安装

1. 安装

参考上的 install 标签

pub global activate log4d

这一步完成后可以通过log4d,log4d_client 来使用插件

2.客户端安装

作为一个库来使用, 首先在 pubspec.yaml 中加入依赖

1dependencies:
2  log4d: ^1.0.3 # 这一步参考最新版

3.获取库

pub getflutter packages get

4. 导入

import 'package:log4d/log4d.dart';

使用

简单的使用方式就是服务端在命令行中开启

1. 开启服务端

log4d -o build/test.log 这样就成功开启了,并且会在接受到日志后将日志保存到指定的目录下

2. 在 flutter 中使用

封装一个简单的帮助类

 1import 'dart:async';
 2
 3import 'package:log4d/log4d.dart';
 4
 5class LogHelper {
 6  Log4dClient _client;
 7
 8  bool isLog = true;
 9
10  bool isRemote = true;
11
12  LogHelper._() {
13    _client = Log4dClient();
14  }
15
16  Future connectRemote() async {
17    await _client.connect();
18  }
19
20  static LogHelper _instance;
21
22  factory LogHelper() {
23    _instance ??= LogHelper._();
24    return _instance;
25  }
26
27  void info(String msg) {
28    if (isLog) print(msg);
29
30    if (isLog && isRemote) {
31      _client.sendEntity(
32        LogEntity()
33          ..level = Level.info
34          ..msg = msg,
35      );
36    }
37  }
38}

3. 在 main 方法中初始化帮助类

1var log = LogHelper();
2void main() async {
3  await log.connectRemote();
4
5  log.info("你好");
6  runApp(MyApp());
7}

后续只需要调用log.info('msg');就可以将日志发送到开发端

控制台会有日志显示,还会实时写入文件

关于插件

本身只是为了临时调试开发的插件,所以不支持太多的定制化选项,时间也只记录时分秒,不包含日期

如果真的有别的需求,欢迎在项目的 issue 中提交 不保证开发 😉

后记

本篇主要使用了 pub global 的功能作为命令行,如果有什么命令行的小脚本,又对于 python/shell/node 不太熟悉,完全可以使用 dart 进行开发