11

AWS Lambda 環境 (Node.js 4.3) で実行しているときに、node.js https ライブラリ環境でソケット エラーと思われるものをデバッグしようとしています。この問題は非常に断続的に発生し、負荷が高い場合にのみ発生します。私のチームは、負荷テストで一貫して問題を再現することができたので、https モジュールからのデバッグ ログを有効にしたいと考えています。

ノードのドキュメントで、NODE_DEBUG=https環境変数を設定することでデバッグ ログを有効にできることがわかりました。ただし、環境変数を設定できるとは思えません: AWS Lambda で環境変数を使用するにはどうすればよいですか? . さらに、Lambda が関数を呼び出すために使用するコマンドラインを変更する機能がありません。

設定と同じデバッグ ログを作成する別の方法はありますNODE_DEBUGか?

4

4 に答える 4

5

ここにモンキーパッチがあります:

const util    = require('util');
let debuglog  = util.debuglog;
util.debuglog = set => {
  if (set === 'https') {
    let pid = process.pid;
    return function() {
      let msg = util.format.apply(util, arguments);
      console.error('%s %d: %s', set, pid, msg);
    }
  }
  return debuglog(set);
}

// This has to occur _after_ the code above:
const https = require('https');

https基本的に、に関係なくデバッグ ロギングを有効にし$NODE_DEBUGます。ノード v4 および v6 でテストされた、任意のモジュールで動作するように簡単に書き直されます。

于 2016-08-24T17:46:31.903 に答える
1

私は Aws Lambda に詳しくありませんが、以下のようにコマンドで変数をエクスポートできるかもしれません:

NODE_DEBUG=https node app.js
于 2016-08-15T23:22:08.833 に答える
0

以下を実行します。

node app.js --https-debug

app.js 内では、スクリプトの先頭にこれがあります

  process.argv.forEach((val, index) => {
    if(val.match(/--https-debug/)) {
      process.env.NODE_DEBUG = "https";
    }
  });

process.env は他のオブジェクトと同じようにオブジェクトですが、ノードはそれに環境変数を設定します。いつでもハッキングして、ノードのグローバル環境から設定された変数をオーバーライドできます。

process.argv を使用して、端末のノード js ファイルに送信されたすべての引数をキャプチャします。

于 2016-08-15T23:28:04.553 に答える