本文實例講述了nodejs實現(xiàn)日志讀取、日志查找及日志刷新的方法。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務器托管報價,主機托管價格性價比高,為金融證券行業(yè)四川主機托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。知識要點:
下圖為日志讀取的前端呈現(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 += '' } logStr += ' '+time+' '+operation+' '+result+' ' }); 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'); }); } }); } '+time+' '+content+'
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。