将console.log输出redirect到文件

这应该是一个微不足道的问题,但我似乎并没有让我的思想围绕它。 有没有简单的方法来redirect我所有的console.log输出到文件? console.log以很好的方式格式化提供的对象,并且与不平凡的JSONable对象的对象进行正确的交互。

例如,如果我这样做

 var myerr = new Error('There has been an error'); console.log(myerr); 

我明白了

 [Error: There has been an error.] 

而如果我只是这样做

 process.stdout.write(JSON.stringify(myerr)); 

我明白了

 {} 

如果我这样做

 process.stdout.write(myerr.toString()); 

我明白了

 Error: There has been an error 

所以如果我重写我的console.log与一个函数,上面的任何技巧循环的参数,并redirect到一个文件日志将不完全相同。

所以我想知道:在输出到控制台之前, console.log是如何处理它所提供的对象的呢? 它只是在每个对象上调用.toString() ,用[]包装所有东西,并把所有东西都发送到process.stdout.write ? 还是它做一些其他types的预处理?

我认为简单的方法来使用Linux I / Oredirect。 只需以这种方式运行你的应用程序:

 node app.js > log.txt 

所有来自您的应用程序的输出消息将被redirect到log.txt

控制台的代码显示如下:

 Console.prototype.log = function() { this._stdout.write(util.format.apply(null, arguments) + '\n'); }; 

你可以简单的做

 const util = require('util'); process.stdout.write(util.format.apply(null, arguments) + '\n'); 

另一个更好的方法是通过对日志进行更精细的控制来使用winston。 在这里看到文件传输: https : //github.com/winstonjs/winston/blob/master/docs/transports.md#file-transport