2016-08-24 86 views
0

我是一個開發新手,今年早些時候開始玩node.js並非常喜歡它。我一直在逐漸增加node.js中的日誌記錄機制。從console.log開始,現在使用RAM磁盤將所有內容記錄到RAM磁盤中的文件中。在node.js中處理錯誤和異常日誌

這種登錄到RAM磁盤的方法接近我的願望。我不想要一個永久文件,但我確實需要一些持久性,這樣如果我的node.js崩潰,我不會丟失之前的日誌。我永遠使用自動重新啓動節點,這意味着我沒有一個活動的終端,我可以實時觀看日誌和錯誤。相反,我有一個GET方法,它從RAM磁盤中讀取所有日誌並將其提供給我。

這是我在RAM磁盤和內存中緩存文件保存日誌代碼:

function generateLog(level, logMsg) { 

    var logLevel; 

    if(level == levelOff) 
     return; // no need to go any further, logging has been disabled. 
    else if(level == levelDebug) 
     logLevel = "DEBUG: "; 
    else if(level == levelInfo) 
     logLevel = "INFO: "; 
    else if(level == levelWarning) 
     logLevel = "WARNING: "; 
    else if(level == levelError) 
     logLevel = "ERROR: "; 
    else if(level == levelException) 
     logLevel = "EXCEPTION: "; 

    if (level >= loggingLevel){ 
     console.log(logLevel + logMsg); 

     checkIfFileExists(logFile, function(err,status){ 

      if(err){ // if file does not exist, save it to memory buffer 

       logBuffer = logBuffer + '<br>' + logLevel + logMsg; // memory 
      } 
      else{ // file exists - save it to this file in RAM_disk 

       fs.appendFile(logFile, logLevel + logMsg + '\n', function(err) { 

        if(err) { 
         return console.log(err); 
        } 

       }); 

      } 

     }); 

    } 

} 

的問題是,當節點進程崩潰因異常或錯誤,則不會獲得登錄到RAM磁盤。

請教如何在節點中記錄錯誤和異常。

回答

0

當nodejs檢測到未處理的錯誤時,它只會崩潰。 你需要有一個process.on('uncaughtException')鉤子來捕獲和記錄錯誤。一個例子是;

process.on('uncaughtException', function (err) { 
    if (err) { 
     console.log("caughtException but no error msg" + err.stack); 
     process.exit(1); 
    } 
}); 

該掛鉤只能用於檢測問題。當發生這種情況時通常無法恢復,因此退出該過程是個好主意。您將在日誌中的堆棧中查看實際的故障。

您可能還需要添加process.on('exit')鉤子,以確定進程是否因應用程序錯誤或其他方式而崩潰;如「systemctl restart」。

+0

謝謝。我會嘗試一下並報告。 – Pankaj

+0

謝謝。這工作,並證明在過去幾次崩潰有幫助。我接受這個答案。 – Pankaj