博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs日志读取 日志查找 日志刷新
阅读量:3948 次
发布时间:2019-05-24

本文共 6022 字,大约阅读时间需要 20 分钟。

                       

知识要点:

  • JavaScript函数传参
  • JavaScript日期处理
  • JavaScript字符串操作
  • 前端时间插件按需定制使用
  • nodejs文件操作
  • nodejs按行读取文件

下图为日志读取的前端呈现,日志读取程序将通过前端选择的日志查找时间和精确度来进行查找,也可以进行最新日志的刷新获取和信息反馈,比如说可以告诉用户自从上次查看过后一共产生了多少条新的日志信息,此程序也做了一定的错误处理

本示例使用到的时间插件可以在我的个人上找到
这里写图片描述

不说太多,上代码

function readLog(date,type,operation){
//函数接受3个参数,日期、精度(天时分秒)和操作(查找、刷新或者默认)        if(date){        //如果有时间参数则对时间参数进行处理(一般日志名称都是时间加类型)            var dataStr = arguments[0];            var date = dataStr.slice(0,10);            var hour = dataStr.slice(11,13);            var minute = dataStr.slice(11,16);            var second =dataStr.slice(11,19);            var type = arguments[1];            //获取精度        }else{        //若无时间参数则获取当前时间,然后精度默认            var date = new Date(+new Date()+8*3600*1000).toISOString().replace(/T/g,' ').replace(/\.[\d]{3}Z/,'').slice(0,10);            var type=null;        }        var op = arguments[2];        var countResult = 0;        //对日志结果进行统计        var logPath = appDirName.slice(0,-3)+'log\\'+'ivsvr_'+date+'.log';        //拼接日志文件名称        var logStr = '';        fs.stat(logPath, function (err, stats) {        //获取对应的日志文件状态        if(err){        //日志不存在或者异常处理信息            $('#logTipInfo tr td').html('无日志信息可供查看');            console.log(err);        }else{            var lineCount = 0;            var readline = require('readline');            var fReadName = logPath;            var fRead = fs.createReadStream(fReadName);            var objReadline = readline.createInterface({                input: fRead,            });            //按行读取日志            objReadline.on('line', (line)=>{                var itemStr = $.trim(line);                var time = itemStr.slice(0,19);                var content = itemStr.substr(20);                if(!time || !content){
return;}                ++ lineCount;                //计数行数                var matched = true;                var itemStr = $.trim(line);                var itemArr = itemStr.split(' ');                var logDate = itemArr[0];                var logTime = itemArr[1];                var time = logDate+' '+logTime;                switch(type){                //进度查找过滤                    case '0':                    case null:                        matched = true;                        break;                    case '1':                        var timeSplit = logTime.slice(0,2);                        if(timeSplit == hour){                            matched = true;                            break;                        }                        matched = false;                        break;                    case '2':                        var timeSplit = logTime.slice(0,5);                        if(timeSplit == minute){                            matched = true;                            break;                        }                        matched = false;                        break;                    case '3':                        var timeSplit = logTime.slice(0,8);                        if(timeSplit == second){                            matched = true;                            break;                        }                        matched = false;                        break;                    default:                        console.log('unkonw type!');                        break;                }                if(matched === true &&(lineCount>logReadFlag)){                //日志结果格式化输出呈现                    countResult ++;                    var result = itemArr[2];                    if(result == 'err'){                        var operation = itemArr[4];                        result = '失败:'+itemArr[5]+' '+(itemArr[6]?itemArr[6]:'');                    }else{                        var operation = itemArr[4]+' '+itemArr[5]+(itemArr[6]?itemArr[6]:'');                        result = '成功';                    }                    logStr += ''+time+''+operation+''+result+''                }                logStr += ''+time+''+content+''            });            objReadline.on('close', ()=>{                if(logReadFlag == 0 && (logStr == '')){                    var info = '无日志信息可供查看';                }                if(logReadFlag >0 && (logStr != '')){                    var newLogNum = lineCount - logReadFlag;                    var info = '刷新成功,更新'+newLogNum+'条日志!';                    $('#logInfoTable').prepend(logStr);                }else if(logReadFlag >0 && (logStr == '')){                    var info = '刷新成功,无日志更新!';                }else{                    $('#logInfoTable').html(logStr);                }                if(op == 'search'){                    var info = '查找到'+countResult+'条日志';                }                $('#logTipInfo tr td').html(info);                if((op == 'search' || op == 'refresh') &&(logReadFlag != 0 || newLogNum >0 || countResult >0)){                    setTimeout(function() {$('#logTipInfo').fadeOut(567);}, 2000);                    //操作结束后给出信息反馈,反馈自动淡出消失                }                else{                    $('#logTipInfo').hide();                }                logReadFlag = lineCount;                console.log('closed');            });        }    });}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

如有疑问请留言讨论!

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

你可能感兴趣的文章
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>
高效率的危害
查看>>
寻找边缘性创新
查看>>
让创意瞄准市场
查看>>
高效经理人应具有的八个重要习惯
查看>>
优秀的领导者能读懂人才
查看>>