zoukankan      html  css  js  c++  java
  • 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 + '
    ', options = { encoding: 'utf8'});
            }
            // console.log(i + '、' +line.toString());
            // console.log(rl.outstream.toString());       
        } else {
            console.log('
    总共输出了' + (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('
    输出结束!');
        console.log('开始时间:' + startTime);
        console.log('结束时间:' + stopTime);
        console.log('指令超时的数量为:' + errCount + '个');
        //文件结束,整理一下统计数据并输出
        process.exit(0);   //加上这一行可以强行结束程序,否则还会继续输出接下来的3,4,5,6直到最后一行。
    });
  • 相关阅读:
    linux 多进程并发服务__关于子进程回收的方法
    Qt中图元对象的多重集成
    Qmake: Q_OBJECT
    Qt Creator 启动失败 可能的解决办法
    Oracle 系统改变号SCN详解
    rman之创建恢复目录笔记
    Oracle 生成和显示执行计划的方法
    系统数据文件备份与恢复及只读数据文件备份与恢复
    没有备份、只有归档日志,如何恢复数据文件?
    ORACLE UNDO REDO查看
  • 原文地址:https://www.cnblogs.com/lswit/p/5012400.html
Copyright © 2011-2022 走看看