最近闲来无事,撸了一个日志插件,功能很简单
在开发机上开启一个服务端
然后客户端(不仅是 flutter,而是只要可以使用dart:io
就可以)开启远程连接,然后就可以发送日志到服务端了
好处
这样的好处是,开发机可以实时接收到日志,并且保存到文件中
因为我们很多时候会发生日志超出一个长度(好像是 1000 个),然后在 console 中不能完整显示的问题,比如网络网文请求,如果响应的报文不完整就不能复制出完整的 json,有的错误不太好定位
使用这个插件后,就可以在开发机简单的通过命令保存日志,方便后续定位
只要你的客户端可以访问到服务端,这就能实现
开发过程
使用WebSocket
连接,这个类在 dart 中依托于dart:io
包,所以如果你是dart web
,可能就用不了这个了,flutter
和dart vm
中是没问题的
这个库支持使用 pub global, 配置 dart 和 pub 到环境变量后可以直接通过./log4d
在命令行中开启
安装
- 安装
参考pub上的 install 标签
pub global activate log4d
这一步完成后可以通过log4d
,log4d_client
来使用插件
- 客户端安装
作为一个库来使用, 首先在 pubspec.yaml 中加入依赖
dependencies:
log4d: ^1.0.3 # 这一步参考最新版
- 获取库
pub get
或 flutter packages get
- 导入
import ‘package:log4d/log4d.dart’;
使用
简单的使用方式就是服务端在命令行中开启
- 开启服务端
log4d -o build/test.log
这样就成功开启了,并且会在接受到日志后将日志保存到指定的目录下
- 在 flutter 中使用
封装一个简单的帮助类
import 'dart:async';
import 'package:log4d/log4d.dart';
class LogHelper {
Log4dClient _client;
bool isLog = true;
bool isRemote = true;
LogHelper._() {
_client = Log4dClient();
}
Future connectRemote() async {
await _client.connect();
}
static LogHelper _instance;
factory LogHelper() {
_instance ??= LogHelper._();
return _instance;
}
void info(String msg) {
if (isLog) print(msg);
if (isLog && isRemote) {
_client.sendEntity(
LogEntity()
..level = Level.info
..msg = msg,
);
}
}
}
- 在 main 方法中初始化帮助类
var log = LogHelper();
void main() async {
await log.connectRemote();
log.info("你好");
runApp(MyApp());
}
后续只需要调用log.info('msg');
就可以将日志发送到开发端
控制台会有日志显示,还会实时写入文件
关于插件
本身只是为了临时调试开发的插件,所以不支持太多的定制化选项,时间也只记录时分秒,不包含日期
如果真的有别的需求,欢迎在项目的 issue 中提交 不保证开发 ?
后记
本篇主要使用了 pub global 的功能作为命令行,如果有什么命令行的小脚本,又对于 python/shell/node 不太熟悉,完全可以使用 dart 进行开发