36

エラー メッセージを記録せずに継続的にクラッシュする Node.js サーバーがあります。これは典型的なシナリオですか?クラッシュする前にエラーをトラップしてログに記録するにはどうすればよいですか?

4

5 に答える 5

57

サーバーのリスナー、詳細をログに記録する例外のハンドラーを設定する前に、特に本番環境でセットアップすることをお勧めします。ここを見てください:

process.on('uncaughtException', function (exception) {
  console.log(exception); // to see your exception details in the console
  // if you are on production, maybe you can send the exception details to your
  // email as well ?
});

Express.js を使用している場合は、こちらを参照して、エラーの完全なスタックを確認する方法を確認してください (本番環境の場合は、最終的にはメールに送信してください)。その場合、リスナーをインスタンス化する前に完全な詳細を提供するように指示します。

var express = require('express');
// ...
var app = express();
var errorHandler = require('errorhandler')

// ...
app.use(errorHandler({ dumpExceptions: true, showStack: true })); 
// then, set the listener and do your stuff...

2019 更新: errorHandler パッケージをインストールする必要があります

于 2013-11-09T20:55:21.880 に答える
0

「errorhandler」と呼ばれるミドルウェアを使用でき、「logger」(log4js-npm-package) を使用すると、すべてのエラー例外のログを保持できます。Errorhandler のコードは次のとおりです。

// ミドルウェア: キャッチオール エラー ハンドラ。エラーをログに記録しますが、内部エラーの詳細をクライアントに漏らさないようにします。

app.use(errorHandler);

function errorHandler(err, req, res, next) {

// XHR Request?
if (req.xhr) {
    logger.error(err);
    res.status(500).send({ error: 'Internal Error Occured.' });
    return;
}

// Not a XHR Request.
logger.error(err);
res.status(500);
res.render('framework/error', { error: "Internal Server Error." });

// Note: No need to call next() as the buck stops here.
return;
}
于 2016-08-11T12:03:33.850 に答える