2016-08-24 5 views
0

Ich bin ein Neuling in der Entwicklung und früher in diesem Jahr begann herumspielen mit node.js und mochte es sehr. Ich habe meinen Logging-Mechanismus in node.js schrittweise erhöht. Ausgehend von console.log und jetzt mit einer RAM-Disk, um alles auf eine Datei in RAM-Disk zu protokollieren.Handle Fehler und Ausnahmen Anmeldung in node.js

Diese Methode der Anmeldung in RAM-Disk ist nahe, was ich wünsche. Ich möchte keine permanente Datei, aber ich möchte etwas Persistenz, so dass, wenn meine node.js abstürzt, ich meine vorherigen Protokolle nicht verliere. Ich benutze für immer, um Knoten automatisch neu zu starten, dh ich habe kein aktives Terminal, wo ich die Logs und Fehler in Echtzeit sehen kann. Stattdessen habe ich eine GET-Methode, die alle Protokolle von der RAM-Disk liest und es mir zurückgibt.

Hier ist mein Code für Protokolle in Datei im RAM-Disk und im Speicherpuffer zu speichern:

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); 
        } 

       }); 

      } 

     }); 

    } 

} 

Das Problem ist, dass, wenn der Knoten Prozess abstürzt aufgrund einer Ausnahme oder Fehler dann bekommen, dass nicht angemeldet die RAM-Disk.

Bitte beachten Sie, wie Fehler und Ausnahmen im Knoten protokolliert werden.

Antwort

0

Wenn Nodejs einen Fehler erkennt, der nicht behandelt wird, stürzt es ab. Sie benötigen einen Prozess.on ('uncaughtException'), um den Fehler zu erfassen und zu protokollieren. Ein Beispiel wäre;

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

Dieser Haken sollte nur verwendet werden, um das Problem zu erkennen. Wenn dies normalerweise geschieht, gibt es keine Möglichkeit zur Wiederherstellung, daher ist es sinnvoll, den Prozess zu beenden. Sie werden den Stapel im Protokoll haben, um den tatsächlichen Fehler zu sehen.

Sie können auch den Hook process.on ('exit') hinzufügen, um festzustellen, ob der Prozess durch einen Anwendungsfehler oder auf andere Weise abgestürzt ist; wie "systemctl neustart".

+0

Danke. Ich werde es ausprobieren und melden. – Pankaj

+0

Danke. Das hat funktioniert und hat sich in den letzten Abstürzen als hilfreich erwiesen. Ich akzeptiere diese Antwort. – Pankaj