2016-08-24 3 views
0

저는 초보자이므로 올해 초 node.js로 게임을 시작했으며 매우 좋아했습니다. 나는 node.js에서 로깅 메커니즘을 점차 증가시키고 있습니다. console.log에서 시작하여 현재 RAM 디스크를 사용하여 모든 것을 RAM 디스크의 파일에 기록합니다.node.js에서 로깅 오류 및 예외가 발생했습니다.

RAM 디스크에 로그인하는이 방법은 내가 원하는 바에 가깝습니다. 영구 파일을 원하지 않지만 내 persist.ence가 필요하므로 node.js가 충돌하면 이전 로그가 손실되지 않습니다. 나는 자동으로 노드를 다시 시작하기 위해 영원히 사용하고 있습니다. 즉, 로그와 오류를 실시간으로 볼 수있는 활성 터미널이 없다는 것을 의미합니다. 대신 RAM 디스크에서 모든 로그를 읽고 다시 제공하는 GET 메서드가 있습니다. 여기

은 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

관련 문제