nodejs - 将appjs控制台传递给文件

时间:2012-09-30 07:02:21

标签: node.js logging stream pipe appjs

我尝试使用以下代码将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,“test”进入控制台,而不是进入日志文件。该平台是win32,但我认为这不重要。

代码有什么问题?

结论

Stdout,stderr和文件写入流都是接收器类型端点,因此我无法将它们绑定在一起。我需要用douplex模拟流替换stdout和stderr,这样我就可以将这些模拟流绑定到原始接收器和日志接收器。我不确定console.log和console.error是否会受到超新星建议替换流的影响,我宁愿使用专用的记录器,它使用控制台而不是这种解决方法。

1 个答案:

答案 0 :(得分:4)

你必须为process.stdin,process.stdout和process.stderr定义getter

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

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

process.stderr.write("test")

这应该有效