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

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

[-- ::33.548] [INFO] lac -
[-- ::33.551] [INFO] lac -
[-- ::33.563] [INFO] lac -
[-- ::33.569] [INFO] lac -
[-- ::33.572] [INFO] lac -

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

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

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

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

4)完成

代码如下:

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

if(process.argv.length != 3)
  {
    console.log("parameter: file.log");
  return;
  }


 var logFile = process.argv[2];

var file = fs.createReadStream(logFile);

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);
} });

最新文章

  1. poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)
  2. CSS3定位和浮动详解
  3. mysql 数据库备份
  4. Fiddler界面详解
  5. 三级菜单---zhufeng
  6. Solaris进程管理
  7. VisionTimer BUG && Start
  8. Servlet的学习(三)
  9. 【IE6的疯狂之九】li在IE中底部空行的BUG
  10. CentOS7防火墙问题
  11. 一次php访问sql server 2008的API接口的采坑
  12. sudo -iu [用户] 命令无法正常切换到用户目录的原因
  13. Python学习笔记【第六篇】:迭代器、生成器、高阶函数、装饰器
  14. zabbix添加对centos系统内存使用率百分比的监控
  15. 《LINQ技术详解C#》-4.LINQ到对象
  16. jmeter发送https请求
  17. 原生dom事件注册和移除事件的封装
  18. Flask源码阅读-第三篇(flask\_compat.py)
  19. [Python] 正确复制列表的方法
  20. 20155233 2016-2017-2 《Java程序设计》第6周学习总结

热门文章

  1. CentOS 6.5网络配置静态IP地址
  2. Zookeeper 源码(二)序列化组件 Jute
  3. linux每天一小步---rm命令详解
  4. swift - 动画学习
  5. 51nod1057—N的阶乘—(大数阶乘)
  6. 咏南中间件+开发框架支持最新的DELPHI 10.2 TOKYO
  7. 转-SourceTree注册atlassian账号SIGUP按钮灰色无法注册的问题
  8. Java Web系列:Hibernate 基础
  9. TFS文件编码检查机制和修改(Team Foundation Server 2013)
  10. Android studio 报错 installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK 解决方法