欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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),日志讀取程序將通過前端選擇的日志查找時間和精確度來進行查找,也可以進行最新日志的刷新獲取和信息反饋,比如說可以告訴用戶自從上次查看過后一共產(chǎ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程序設計有所幫助。

相關文章

  • 詳解KOA2如何手寫中間件(裝飾器模式)

    詳解KOA2如何手寫中間件(裝飾器模式)

    這篇文章主要介紹了詳解KOA2如何手寫中間件(裝飾器模式),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 在node.js中讀寫文件的三種方法總結

    在node.js中讀寫文件的三種方法總結

    nodejs中所有與文件相關的操作都在fs模塊中,而讀寫操作又是我們會經(jīng)常用到的操作,nodejs的fs模塊針對讀操作為我們提供了readFile,read, createReadStream三個方法,接下來小編就和大家一起來分析一下這三種方法
    2023-09-09
  • 2023年全網(wǎng)最新Node.js下載安裝教程

    2023年全網(wǎng)最新Node.js下載安裝教程

    這篇文章主要介紹了2023年全網(wǎng)最新Node.js下載安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志(等同tail -f命令)

    Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志(等同tail -f命令)

    這篇文章主要介紹了Node.js中使用Log.io在瀏覽器中實時監(jiān)控日志,Log.io等同于tail -f命令,但更強大,需要的朋友可以參考下
    2014-09-09
  • Node.js連接postgreSQL并進行數(shù)據(jù)操作

    Node.js連接postgreSQL并進行數(shù)據(jù)操作

    自從MySQL被Oracle收購以后,PostgreSQL逐漸成為開源關系型數(shù)據(jù)庫的首選。這篇文章就給大家介紹了關于Node.js如何連接postgreSQL數(shù)據(jù)庫,并進行數(shù)據(jù)操作的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • npx的使用及原理分析

    npx的使用及原理分析

    這篇文章主要介紹了npx的使用及原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • webpack配置文件和常用配置項介紹

    webpack配置文件和常用配置項介紹

    本篇文章主要介紹了webpack配置文件和常用配置項的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 詳解如何優(yōu)雅在webpack項目實現(xiàn)mock服務器

    詳解如何優(yōu)雅在webpack項目實現(xiàn)mock服務器

    這篇文章主要為大家介紹了詳解如何優(yōu)雅在webpack項目實現(xiàn)mock服務器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 在Node.js中使用HTTP上傳文件的方法

    在Node.js中使用HTTP上傳文件的方法

    這篇文章主要介紹了在Node.js中使用HTTP上傳文件的方法,作者以windows下的visual studio作為操作node的環(huán)境,推薦閱讀!需要的朋友可以參考下
    2015-06-06
  • nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼

    nodejs redis 發(fā)布訂閱機制封裝實現(xiàn)方法及實例代碼

    這篇文章主要介紹了nodejs redis 發(fā)布訂閱機制封裝的相關資料,這里提供了實現(xiàn)方法,及實例代碼,具有參考價值,需要的朋友可以參考下
    2016-12-12

最新評論