Javascript 将node.js登录到文件,而不使用其他模块
我正在作为守护进程运行一个节点应用程序。调试守护进程时,我需要查看输出,因此我希望将stdout和stderr重定向到一个文件 我希望我可以像Python或C中那样重新分配Javascript 将node.js登录到文件,而不使用其他模块,javascript,node.js,Javascript,Node.js,我正在作为守护进程运行一个节点应用程序。调试守护进程时,我需要查看输出,因此我希望将stdout和stderr重定向到一个文件 我希望我可以像Python或C中那样重新分配stdout和stderr: fs = require('fs'); process.stdout = fs.openSync('/var/log/foo', 'w'); process.stderr = process.stdout; console.log('hello'); 当我直接运行脚本时,“hello”被打印到控
stdout
和stderr
:
fs = require('fs');
process.stdout = fs.openSync('/var/log/foo', 'w');
process.stderr = process.stdout;
console.log('hello');
当我直接运行脚本时,“hello”被打印到控制台!当然,当我在后台运行时,我不会在控制台(当然)或/var/log/foo
中看到输出
我不想也不需要复杂的日志记录。我只需要查看节点已经提供的内置消息。在创建时,
控制台
对象获取对进程的引用。stdout
和stderr
。(您可以在中看到这一点) 以后重新分配它们不会影响控制台 重定向这些流的通常方法是在重定向流的情况下启动进程
或者,您可以覆盖
控制台
方法,让它们改为写入您的文件。当控制台
对象第一次创建时,它会获取对进程.stdout
和stderr
的引用。(您可以在中看到这一点) 以后重新分配它们不会影响控制台 重定向这些流的通常方法是在重定向流的情况下启动进程 或者,您可以覆盖
控制台
方法,并将其写入您的文件。类似于,您可以覆盖控制台.log
中的进程.stdout.write
var fs = require('fs');
var oldWrite = process.stdout.write;
process.stdout.write = function (d) {
fs.appendFileSync('./foo', d);
oldWrite.apply(this, arguments);
};
console.log('hello');
与类似,您可以覆盖控制台.log
中的进程.stdout.write
var fs = require('fs');
var oldWrite = process.stdout.write;
process.stdout.write = function (d) {
fs.appendFileSync('./foo', d);
oldWrite.apply(this, arguments);
};
console.log('hello');
js的要点是使用另一个模块。另一个模块以某种方式钩住节点。我想知道怎么做,所以我可以自己做。阅读它的源代码。Node.js的全部要点是使用另一个模块。另一个模块以某种方式连接到Node。我想知道怎么做,所以我可以自己做。阅读它的源代码。