将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