1

私はappjsコンソールを次のコードでファイルにパイプしようとします:

var fs = require('fs');
var logStream = fs.createWriteStream(__dirname+ '/log.txt', { flags: 'a' });
process.stdout.pipe(logStream);
process.stderr.pipe(logStream);
console.log("test");

空のファイルが作成されますが、それ以上はありません... node.exeを使用すると、「テスト」はログファイルではなくコンソールに送られます。プラットフォームはwin32ですが、重要ではないと思います。

コードの何が問題になっていますか?

結論:

Stdout、stderr、およびファイル書き込みストリームはすべてシンクタイプのエンドポイントであるため、これらをバインドすることはできません。stdoutとstderrを二重のモックストリームに置き換える必要があります。これにより、これらのモックストリームを元のシンクとログシンクの両方にバインドできるようになります。ストリームをsupernovaが提案するメカニズムに置き換えることで、console.logとconsole.errorが影響を受けるかどうかはわかりません。この回避策の代わりに、コンソールを使用する専用のロガーを使用したいと思います。

4

1 に答える 1

4

process.stdin、process.stdout、およびprocess.stderrのゲッターを定義する必要があります

var fs = require("fs")
  , errlog = fs.createWriteStream("./err.log", { flags: 'a' })

process.__defineGetter__("stderr", function(){
  return errlog 
})

process.stderr.write("test")

これはうまくいくはずです

于 2012-09-30T07:34:31.030 に答える