1

node アプリケーションをデーモンとして実行しています。デーモンをデバッグするとき、出力を確認する必要があるため、stdout と stderr をファイルにリダイレクトしたいと考えています。

PythonまたはCで再割り当てstdoutして好きにできると思います:stderr

fs = require('fs');
process.stdout = fs.openSync('/var/log/foo', 'w');
process.stderr = process.stdout;
console.log('hello');

スクリプトを直接実行すると、「こんにちは」がコンソールに出力されます! もちろん、バックグラウンドで実行すると、出力はコンソール (もちろん) にも にも表示されません/var/log/foo

高度なログ記録は必要ありません。ノードがすでに提供している組み込みメッセージを表示する必要があるだけです。

4

2 に答える 2

1

consoleオブジェクトは、最初に作成されたときにprocess.stdoutandへの参照を取得します。(これはソース で確認できます)。stderr

後で再割り当てしても影響はありませんconsole

これらのストリームをリダイレクトする通常の方法は、ストリームをリダイレクトしてプロセスを起動することです。

または、メソッドを上書きして、console代わりにファイルに書き込むようにすることもできます。

于 2013-09-18T21:05:16.670 に答える
0

この質問と同様に、から呼び出されるprocess.stdout.writeものを上書きできます。console.log

var fs = require('fs');
var oldWrite = process.stdout.write;

process.stdout.write = function (d) {
    fs.appendFileSync('./foo', d);
    oldWrite.apply(this, arguments);
};

console.log('hello');
于 2013-09-18T21:15:54.630 に答える