node.js 日志处理(fs,readline,stream)

2015-12-2 11:09:30

实现了逐行读取文件,分析内容并把符合要求的内容写到另外一个文件中。

但是还是只实现了一半想要的功能。

最想要的功能是读取到指令超时记录的时候,再向上寻找到和这条记录对应的另外一行发指令的记录。

但是没有找到什么按行读取文件的方法,也就没法按照当前的行倒序向前读取去寻找对应的发指令记录。

想先把文件倒序来写到另外一个文件中,但是还是找不到在文件头附加新内容的方法,现有的方法都是在文件尾附加新内容。

如果发指令对应的采集器只有一个就好了,就可以从头开始寻找,虽然有点慢但还能找到。现在从头开始找的话几乎必然不是超时记录对应的那条指令。。。。

var fs        = require('fs');
var readline  = require('readline');
var stream    = require('stream');

var streamFile = function(filename){
    var instream  = fs.createReadStream(filename);
    var outstream = new stream;
    return readline.createInterface(instream, outstream);
}

var rl = streamFile('./logorder2015_12_1.txt');

var i = 0;
var startTime,stopTime;
var errCount = 0;

var colectorNum = '';

var Datetemp1 = new Date();
startTime = Datetemp1.getFullYear() + "-" + (Datetemp1.getMonth() + 1) + "-" + Datetemp1.getDate() + " " + Datetemp1.getHours() + ":" + Datetemp1.getMinutes() + ":" + Datetemp1.getSeconds() + ":" + Datetemp1.getMilliseconds();

rl.on('line', function(line) {

    if(i <= 20000 ) {    
        var data = line.toString();
        var err = new RegExp('指令超时');
        if(err.test(data)) {
            errCount ++;
            colectorNum = data.substr(data.length - 15 , 9);
            console.log(colectorNum);
            // console.log(line.toString());
            // fs.appendFileSync('超时记录.txt', data + '\r\n', options = { encoding: 'utf8'});
        }
        // console.log(i + '、' +line.toString());
        // console.log(rl.outstream.toString());       
    } else {
        console.log('\n总共输出了' + (i-1) + '行');
        rl.close();
    }

    i++;

    // var req = someProcessingJob(line);
    // someStatisticJob(req);
    //类似forEach,处理每行日志的数据,一般先读,再执行统计代码
});


rl.on('close',function(){
    var Datetemp2 = new Date();
    stopTime = Datetemp2.getFullYear() + "-" + (Datetemp2.getMonth() + 1) + "-" + Datetemp2.getDate() + " " + Datetemp2.getHours() + ":" + Datetemp2.getMinutes() + ":" + Datetemp2.getSeconds() + ":" + Datetemp2.getMilliseconds();
    console.log('\n输出结束!');
    console.log('开始时间:' + startTime);
    console.log('结束时间:' + stopTime);
    console.log('指令超时的数量为:' + errCount + '个');
    //文件结束,整理一下统计数据并输出
    process.exit(0);   //加上这一行可以强行结束程序,否则还会继续输出接下来的3,4,5,6直到最后一行。
});

 

posted @ 2015-12-02 11:15  流殇微  阅读(1914)  评论(0编辑  收藏  举报