我尝试使用以下代码将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是否会受到超新星建议替换流的影响,我宁愿使用专用的记录器,它使用控制台而不是这种解决方法。
答案 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")
这应该有效