nodejs – pipeappjs控制台到文件

我尝试使用以下代码将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"); 

它会创build一个空文件,但仅此而已…使用node.exe时,“testing”会进入控制台,而不会进入日志文件。 该平台是win32,但我不认为这是重要的。

代码有什么问题?

结论:

Stdout,stderr和一个文件写入stream都是sinktypes的端点,所以我不能将它们绑定在一起。 我需要用双工模拟stream来replacestdout和stderr,这样我就可以将这些模拟stream绑定到原始接收器和日志接收器。 我不确定console.log和console.error是否会受到用build议的超新星机制replacestream的影响,我宁愿使用一个专用的logging器,而不是使用这个解决方法。

您必须为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") 

这应该工作