我能在Node.js中捕获控制台输出吗?

6

我想要先结束一个进程,我使用以下命令:

exec  = require('child_process').exec;
exec('kill xxx', function(error, stdout, stderr) {
    if (error) {
        console.log('exec error: ', error);
    }else{
       console.log(stdout)
    }
});

我注意到kill程序可能启动了一个子进程,其输出不能作为标准输出在此处捕获。

那么我通常可以捕获这些似乎与代码不太相关的控制台输出吗?


4
可能是Node: log in a file instead of the console的重复问题。 - Seth McClaine
如果你想真正“抓住它们”,可以使用“npm run dev > log.txt”将所有内容输出到文件中,然后创建一个外部应用程序/脚本来处理转储的文本并将其重定向到远程日志记录器。 - Heroselohim
1个回答

8

被盗: Node.js:将日志记录到文件而不是控制台

var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

答案 #2 这个信息并不是由console.log创建的,而是Linux系统本身生成的。如何捕获它?

我认为你可以通过fs这样做...

  var fs = require('fs');
  var util = require('util');
  var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
  var log_stdout = process.stdout;

const command = 'node your_node_script'; //Whatever you would run in terminal

cp.exec(command, (error, stdout, stderr) => {
    if(error) {
        log_file.write(error);

    }
    if(stdout) {
        log_file.write(stdout);
    }
    if(stderr) {
        log_file.write(stderr);
    }
});

嗯,问题是控制台输出并不一定由console.log创建。例如,当我杀死一个进程,等待2秒钟,然后控制台将生成一条消息“xxx terminated”。这条消息并非由console.log创建,而仅仅是Linux系统本身。如何捕获它? - J.R.
更新的答案,建议尝试。 - Seth McClaine
它部分工作,但不显示第二个参数的console.log与变量,只有引用的文本数据。 - Angelzzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接