log.io:浏览器端实时日志监管系统(3)自定义 harvester
- UID
- 1066743
|
log.io:浏览器端实时日志监管系统(3)自定义 harvester
自定义 harvesterlog.io 的默认的收割器是用 Node.js 实现的,非常简单,可以在安装目录里面找到源代码,我安装在 root 下:/root/node-v0.10.40-linux-x64//lib/node_modules/log.io/bin/log.io-harvester。
默认的收割器实现了监测单个文件的功能。但是在日常情况下,日志都是放在一个文件目录里面,如果想监测整个文件目录的变化,默认的收割器做不到使,但是已知收割器和服务端的接口是 TCP,我们可以通过自己撰写程序来实现。
此处提供代码下载。实现以下功能。
- 当监测目录中有文件创建的时候,会自动建立 stream。
- 当文件删除的时候,stream 也会删除。
- 当文件改名的时候,对应的 stream 会变成新的文件名。
- 当文件有新增信息的时候,会把增量的部分输出到屏幕上。
安装步骤1. 下载文件 myHarverster.js 到本地
2. 安装依赖
1
| npm install chokidar --save
|
3. 修改监测的目录信息,这里用/root/test/logs。
1
2
3
4
5
6
| logStreams: {
directories: [
//监测的目录
'/root/test/logs'
]
},
|
4. 修改服务器地址和端口
1
2
| host: '0.0.0.0',//log.io 服务器地址
port: 28777//log.io 端口
|
5. 运行程序
1
2
| node myHarverster.js
log.io-server
|
6. 在监测目录下建立 a.txt,b.txt,c.txt 三个文件,log.io 会自动同步流信息,展示结果如图 5 所示。
图 5. 显示流信息1. 在 a.txt 中添加信息 this is a message。展示结果如图 6 所示。
图 6. 浏览器上显示发送信息2. 重命名 a.txt 到 d.txt。log.io 同步变化,如图 7 所示。
图 7. 重命名3. 勾选 d.txt,在 d.txt 中添加信息 this is message from d.txt。展示结果如图 8 所示。
图 8. 发送信息到新的流代码说明1. 建立一个 socket, 在这里我们采用 Node.js 提供的 net 的接口,可以看到,Node.js 通过回调函数完成功能。这里体现了 Node.js 编程的好处,所有的异步操作不会阻塞进程,而是向下执行,通过回调函数在异步操作完成之后继续运行。
1
2
3
4
5
6
7
8
9
| function socket_init(port, host){
var socket = new net.Socket();
socket.on('error', function(error) {
return setTimeout((function() {
return socket_init();
}), 2000);
});
return socket.connect(port, host);
}
|
2.Watch 函数用来监测文件夹中的变更情况,这里采用 chokidar 提供的 watcher。本身 Node.js 提供的文件监测服务只能完成基本的监测,chokidar 提供了更多的监测事件,例如 unlink 等等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| function watch(path, socket) {
var currect = {};
var watcher = chokidar.watch(path, {
ignored: /[\/\\]\./,
persistent: true
});
watcher.on('unlink', function(path){
send(socket, "-stream|" + p.basename(path) + "|" + nodeName);
});
watcher.on('add', function(path){
send(socket, "+stream|" + p.basename(path) + "|" + nodeName);
});
watcher.on('change', function(path, stat){
if(currect[p.basename(path)] === undefined){
currect[p.basename(path)] = 0;
}
read(path, stat.size, currect[p.basename(path)], socket);
currect[p.basename(path)] = stat.size;
});
}
|
总结log.io 是一套实时浏览器日志监管系统,以 Node.js 和 socket.io 为主要开发技术,以收割器来监测日志输出,TCP 传输日志信息。当然,收割器是可自定义的,可以通过自己写收割器来扩展 log.io 的功能。实际上,虽然 log.io 作为一个日志管理系统,但是它却可以完成很多其他需要浏览器实时呈现的需求。例如,聊天室需求,log.io 作为呈现输出端,输入端是自己写的收割器。所以我们可以利用 log.io 为我们提供的特性,来进行二次开发。 |
|
|
|
|
|