我正在尝试确定逐行读取实时文件的最佳方法。
该行将被发送消费然后被丢弃。
该文件是活动的,这意味着它正被另一个应用程序(它的日志文件)写入。
文件可能很大,因此我不想将整个内容准备好放入内存然后进行处理。
似乎有许多插件即模块。不确定最好(快速和有效)的方式是什么。
我使用的是node.js版本0.10.33
由于
答案 0 :(得分:1)
使用tail。它就像unix tail
命令一样,但在节点中。
npm install tail
来自npm页面的用法示例:
Tail = require('tail').Tail;
tail = new Tail("fileToTail", "\n", {}, true);
tail.on("line", function(data) {
console.log(data);
});
tail.on("error", function(error) {
console.log('ERROR: ', error);
});
答案 1 :(得分:1)
您可以创建阅读流http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options 并在下一行之前阅读。像这样的东西
var lines = [],
line,
rs = require('fs').createReadStream('/etc/passwd');
rs.on('data', function(chunk){
var indx = chunk.indexOf("\n")'
if( indx !== -1 ) {
line = line + chunk;
} else {
line = line + chunk.chunk(0, indx); //we cut the "\n" symbol.
lines.push(line); //we add line to array of lines of file
line = ''; //we clear buffer
}
});
rs.on('end', function(){
console.log(lines);
});
答案 2 :(得分:0)
仅限Linux的解决方案是spawn
child_process
tail -f /path/to/your/log
{{1}}并使用stdout做一些事情 - 不是很优雅,但它会起作用。