2014-09-15 24 views
5

Ich benutze pm2 (https://github.com/Unitech/pm2) in meinem Projekt node.js. Auch ich sende Logs von Fehlern der App in Logentries (https://logentries.com).node.js - PM2-Protokoll nicht abgefangene Ausnahmen zu Drittanbieter-Service (als Logentries)

Ich frage mich, ist es möglich, nicht abgefangene Ausnahmen von der App zu protokollieren (wenn etwas schlecht versagt und PM2 zum Beispiel die App neu startet)? Ich weiß, dass die Verwendung von process.on('uncaughtException') schlechte Übung ist, so würde ich gerne einige Vorschläge hören.

Danke!

Antwort

6

Wo haben Sie gelesen, dass process.on('uncaughtException') eine schlechte Praxis ist?

Solange Sie den Prozess beenden, nachdem die Ausnahme Anmeldung Ich sehe nicht, was schlecht ist, hier ein Beispiel:

process.on('uncaughtException', function(e) { 
    console.error('Ouch, an unhandled exception'); 
    //I like using new Error() for my errors (1) 
    console.error(e instanceof Error ? e.message : e); 
    process.exit(1); 
}); 

(1): Javascript Error reference

bearbeiten pm2- Schnittstelle ist jetzt veraltet, verwenden Sie stattdessen require('pm2'). Sie können dasselbe wie unten mit bus system events tun.


Eine Alternative mit PM2 ist pm2-interface und das Hören auf die process:exit oder process:exception Ereignisse zu verwenden:

var ipm2 = require('pm2-interface')(); 

ipm2.on('ready', function() { 
    console.log('Connected to pm2'); 

    ipm2.bus.on('process:exception', function(data){ 
    console.log(data.pm2_env.name + 'had an exception'); 
    }); 
}); 

Diese praktische Möglichkeit wirklich, wenn mehr als ein Prozess durch einen Überwachungsprozess zu verwalten.

Sie können den Blogpost auf how to build a custom pm2 logger überprüfen. Es kann Ihnen einige Ideen zur Überwachung von Prozessen durch pm2-interface geben.