web-dev-qa-db-ja.com

NodeJS ExpressJS-本番サーバーのエラーをログに記録する方法は?

ExpressJSアプリからのエラーをファイルに記録するにはどうすればよいですか?

monolog :を使用してSlimフレームワークを簡単にログに記録できることを知っています。

$app->get('/tickets', function (Request $request, Response $response) {
    $this->logger->addInfo("Something interesting happened");

    $mapper = new Simon\TicketMapper($this->db);
    $tickets = $mapper->getTickets();

    $response->getBody()->write(var_export($tickets, true));
    return $response;
});

Expressでは、通常、developmentのエラーをコンソールに記録します。

Model.findOne(options, function(err, doc) {

    var output = {};
    if (err) {
        console.log("Error retrieving doc: " + err);
    }

しかし、私のproductionサーバーでは、アプリがうまくいかないときに役立つログファイルが必要です。

何か案は?

Expressのapp.js、これがあります:

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {

  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: err
    });
  });

}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

しかし、どうすればプロダクションのものをオンにできますか?必要なモノログと同じですか?

6
laukok

winston は、ロギング用の一般的なライブラリです。

すべてのログを1つのファイルに転送することも、エラー、デバッグ、および情報ログ用に異なるファイルを保持することもできます。

例:

  var winston = require('winston');

  var logger = new winston.Logger({
    level: 'error',
    transports: [
      new (winston.transports.File)({ filename: 'error.log' })
    ]
  });

コード内:

logger.log('error', 'test error message %s', 'my string');

winston dailyrotate file with winstonを使用して、サイズまたは日付に基づいてログファイルをローテーションすることもできます。

7
Talha Awan

morgan のようなログライブラリを追加するか、ノードアプリをpm2のようなプロセスマネージャーで実行している場合は、pm2がログを追跡します。私はpm2を1トン使用していませんが、私が理解していることから、あなたはあなたを維持することができますconsole.logステートメントは同じで、pm2はアプリからのすべての出力をログファイルに保存します。 pm2のロギング機能の詳細を読むことができます ここ

2
arjabbar

PM2はプロセスマネージャであるため、無関係に感じるかもしれませんが、PM2もエラーログを処理するのに最適であることがわかりました。

0
Matee Gojra