2012-05-28

[Node.js] uncaughtException イベントでスタックトレースを出す

公式ドキュメントのコードをそのまま使うと、デフォルト動作時にはプロセス終了とともに表示されていたスタックトレースを握りつぶすことになるので、混乱を避けるためスタックトレースを出しておくのがお勧めです。

公式にはエラーオブジェクトの仕様が載っていませんが、スタックトレースを取り出すには、node docs :: What is the error object? の通り、error.stack を読み取れば良いようです。中身は human-readable な文字列なのでそのまま出力できます。

console.error とは Node.js では STDERR に出力する console.log です。

process.on('uncaughtException', function (error) {
    console.error('uncaughtException: ' + error.stack);
});

setTimeout(function () {
    throw new Error('something happened');
}, 1000);

/*
出力例:

uncaughtException: Error: something happened
    at Object._onTimeout (C:\Users\hideki\Desktop\uetest.js:7:8)
    at Timer.ontimeout (timers.js:94:19)
*/

Event: 'uncaughtException' - node.js Manual & Documentation