我在node.js中使用console.log:这样我就可以登录到屏幕了 例如:
节点myscript.js
如果我使用
node myscript.js>log.txt
然后我登录到log.txt文件
如何登录屏幕和文件?
答案 0 :(得分:7)
使用tee
。
node myscript.js | tee log.txt
答案 1 :(得分:4)
如果您希望此行为在您的应用中保持持久性,您可以创建直通流并将其传递给writeStream和stdout。
var util = require('util');
var fs = require('fs');
// Use the 'a' flag to append to the file instead of overwrite it.
var ws = fs.createWriteStream('/path/to/log', {flags: 'a'});
var through = require('through2');
// Create through stream.
var t = new through();
// Pipe its data to both stdout and our file write stream.
t.pipe(process.stdout);
t.pipe(ws);
// Monkey patch the console.log function to write to our through
// stream instead of stdout like default.
console.log = function () {
t.write(util.format.apply(this, arguments) + '\n');
};
现在这将写入stdout(终端显示)和日志文件。
您也可以省略through
流,只需在Monkey修补函数中写入两个流。
console.log = function () {
var text = util.format.apply(this, arguments) + '\n';
ws.write(text);
process.stdout.write(text);
};
直播流只会为您提供一个可以在应用程序周围以其他方式使用的单个流,并且您始终知道它是通过管道传输到两个输出流。但如果你想要的只是猴子补丁console.log
,那么后一个例子就足够了:)
如果您只想从终端单次运行应用程序,请参阅@andars' answer和tee
命令:)
PS - This就是console.log
在节点中实际做的所有事情,以防您想知道。
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};