nodejs實現(xiàn)日志讀取、日志查找及日志刷新的方法分析
更新時間:2019年05月20日 08:47:21 作者:Lockeyi
這篇文章主要介紹了nodejs實現(xiàn)日志讀取、日志查找及日志刷新的方法,涉及nodejs日期時間運算、轉換及日志讀寫等相關操作技巧,需要的朋友可以參考下
本文實例講述了nodejs實現(xiàn)日志讀取、日志查找及日志刷新的方法。分享給大家供大家參考,具體如下:
知識要點:
- JavaScript函數(shù)傳參
- JavaScript日期處理
- JavaScript字符串操作
- 前端時間插件按需定制使用
- nodejs文件操作
- nodejs按行讀取文件
下圖為日志讀取的前端呈現(xiàn),日志讀取程序將通過前端選擇的日志查找時間和精確度來進行查找,也可以進行最新日志的刷新獲取和信息反饋,比如說可以告訴用戶自從上次查看過后一共產生了多少條新的日志信息,此程序也做了一定的錯誤處理
本示例使用到的時間插件可以在我的個人github 上找到

不說太多,上代碼
function readLog(date,type,operation){
//函數(shù)接受3個參數(shù),日期、精度(天時分秒)和操作(查找、刷新或者默認)
if(date){
//如果有時間參數(shù)則對時間參數(shù)進行處理(一般日志名稱都是時間加類型)
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{
//若無時間參數(shù)則獲取當前時間,然后精度默認
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;
//對日志結果進行統(tǒng)計
var logPath = appDirName.slice(0,-3)+'log\\'+'ivsvr_'+date+'.log';
//拼接日志文件名稱
var logStr = '';
fs.stat(logPath, function (err, stats) {
//獲取對應的日志文件狀態(tài)
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;
//計數(shù)行數(shù)
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)){
//日志結果格式化輸出呈現(xiàn)
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 += '<tr><td>'+time+'</td><td>'+operation+'</td><td>'+result+'</td></tr>'
}
logStr += '<tr><td>'+time+'</td><td>'+content+'</td></tr>'
});
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');
});
}
});
}
如有疑問請留言討論!
希望本文所述對大家nodejs程序設計有所幫助。
相關文章
詳解Node.js利用node-git-server快速搭建git服務器
本篇文章主要介紹了詳解Node.js利用node-git-server快速搭建git服務器,非常具有實用價值,需要的朋友可以參考下2017-09-09
nodejs獲取本機內網(wǎng)和外網(wǎng)ip地址的實現(xiàn)代碼
這篇文章主要介紹了nodejs獲取本機內網(wǎng)和外網(wǎng)ip地址的實現(xiàn)代碼,需要的朋友可以參考下2014-06-06

