【问题标题】:Can I capture the console output in Node.js?我可以在 Node.js 中捕获控制台输出吗?
【发布时间】:2018-05-19 09:31:54
【问题描述】:

我一开始试图杀死一个进程,我执行了

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

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

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

【问题讨论】:

标签: javascript node.js kill


【解决方案1】:

被盗:Node: log in a file instead of the console

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 终止”。此消息不是由 console.log 创建的,而只是 Linux 系统本身。如何抓住这个?
  • 更新了答案并建议尝试。
  • 它部分有效,但不显示带有变量的 console.log 的第二个参数,仅引用文本数据
猜你喜欢
  • 2012-12-04
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多