1

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

代码有什么问题?

结论:

标准输出、标准错误和文件写入流都是接收器类型的端点,所以我不能将它们绑定在一起。我需要用双工模拟流替换标准输出和标准错误,这样我就可以将这些模拟流绑定到原始接收器和日志接收器。我不确定console.log 和console.error 是否会受到用supernova 建议的机制替换流的影响,我宁愿使用专用的记录器,它使用控制台而不是这种解决方法。

4

1 回答 1

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")

这应该工作

于 2012-09-30T07:34:31.030 回答