9

Expressをフレームワークとして使用し、Winstonをロガーモジュールとして使用して、node.jsでRESTfulサーバーを開発しています。このサーバーは大量の同時リクエストを処理します。「リクエスト ID」などを使用して、特定のリクエストごとにログ エントリを追跡できると非常に便利です。単純な解決策は、ログ エントリを作成するたびにこの ID を別のログ情報として追加することですが、これは、サーバーが使用する各メソッドに「リクエスト ID」を渡すことを意味します。

特定のリクエストごとにリクエストIDを持ち歩くことなく、より簡単な方法でこれを行うことができるnode.js/javascriptモジュールまたはテクニックがあるかどうかを知りたいです。

4

5 に答える 5

17

自動インクリメントすると、後のログ分析でリクエストを一意に識別できなくなります。これは、異なるインスタンスが衝突する ID を生成し、アプリを再起動すると ID の衝突が自動的に発生するためです。

別の可能な解決策を次に示します。

Cuid をインストールします。

npm install --save cuid

次に、メインのアプリ ファイルで次のようにします。

var cuid = require('cuid');
var requestId = function requestId(req, res, next) {
  req.requestId = cuid();
  next();
};

// Then, at the top of your middleware:
app.use(requestId);

これで、衝突する可能性が低いわかりやすい要求 ID を取得でき、ログ分析とデバッグの要求を、複数のインスタンスやサーバーの再起動であっても一意に識別できるようになります。

于 2013-09-22T22:14:57.640 に答える