首页 > Web开发 > 详细

Nodejs统计每秒记录日志数

时间:2014-03-10 20:52:52      阅读:576      评论:0      收藏:0      [点我收藏+]

问题:线上的写日志操作非常频繁,想统计每秒写了多少行数据?假如没法送一个消息写一个日志,问题也就变成了,每秒发送多少消息了。

日志采用log4js书写,格式如下:

[2014-03-10 11:23:33.548] [INFO] lac -
[2014-03-10 11:23:33.551] [INFO] lac - 
[2014-03-10 11:23:33.563] [INFO] lac - 
[2014-03-10 11:23:33.569] [INFO] lac - 
[2014-03-10 11:23:33.572] [INFO] lac - 

 

思路:依次读取日志的每一行,解析出时间字段,如 11:23:33 作为一个哈希表的key,没碰到依次,统计值加1. 最后根据统计次数排序。

1)按行读取:使用readline模块,在createInterface函数中将已经创建的readStream对象传递给他即可。

2)监听readline模块的line事件,在其中可以读到每一行数据

3)监听close事件,当文件读取完成时会得到通知,在其中进行排序操作。

4)完成

代码如下:

bubuko.com,布布扣
var readline = require(‘readline‘);
var fs = require(‘fs‘);


var file = fs.createReadStream(‘./tt‘);

var rl = readline.createInterface({
  input: file,
  output: process.stdout,
  terminal: false
});

var counter = {};
rl.on(‘line‘,function(line){
  var items = line.split(‘ ‘);
  if(items.length >= 2){
    console.log("%s",items[1].substring(0,8));
    var timestr = items[1].substring(0,8);
    if(counter.hasOwnProperty(timestr)){
      counter[timestr]++;
    }else{
      counter[timestr] = 1;
    }
  }
});

rl.on(‘close‘,function(){
  rl.close();
  file.close();
  
  var keys = Object.keys(counter);

  var arr = [];  
  for(var index in keys){
    var key = keys[index];    
    arr.push({count:counter[key],key:key});
  }
  
  ///sort by count descent
  arr.sort(function(item1,item2){
    return item2.count - item1.count;
  });
  
  for(var index in arr){
    console.log(‘%s %d‘,arr[index].key,arr[index].count);
  }
  
});
bubuko.com,布布扣

Nodejs统计每秒记录日志数,布布扣,bubuko.com

Nodejs统计每秒记录日志数

原文:http://www.cnblogs.com/chang290/p/3592087.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!