Node.js console.log - 是否可以更新一行而不是创建新行?

时间:2013-06-26 00:34:24

标签: javascript node.js

我的node.js应用程序有很多控制台日志,这对我来说很重要(它是一个非常大的应用程序,所以运行了很长时间,我需要知道事情仍然在进展)但是我最终得到数千行控制台日志。

以某种方式可以执行删除/替换控制台行而不是创建新行的console.update吗?

4 个答案:

答案 0 :(得分:70)

尝试在控制台上使用process.stdout方法:

process.stdout.write("Hello, World");
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write("\n"); // end the line

答案 1 :(得分:14)

当然,您可以使用我帮助创建的模块执行此操作:fknsrs/jetty

通过

安装
npm install jetty

这是一个用法示例

// Yeah, Jetty!
var Jetty = require("jetty");

// Create a new Jetty object. This is a through stream with some additional
// methods on it. Additionally, connect it to process.stdout
var jetty = new Jetty(process.stdout);

// Clear the screen
jetty.clear();

// write something
jetty.text("hello world");
jetty.moveTo([0,0]);
jetty.text("hello panda");

Jetty在自己使用时并不是非常有用。当你在它上面构建一些抽象来使你的码头调用更简洁时,它会更加有效。

查看我在fknsrs/bento中如何使用jetty获取更多用法示例。

答案 2 :(得分:10)

写一个部分线。

process.stdout.write("text");
process.stdout.write("more");
process.stdout.write("\n"); // end the line

如果输出量是真正的问题,那么您可能会重新考虑您的日志记录。您可以使用允许选择性运行时日志记录的日志记录系统,将输出范围缩小到所需的范围。

// The sections we want to log and the minimum level
var LOG_LEVEL = 4;
var LOG_SECTIONS = ["section1","section2","section3"];

function logit(msg, section, level) {
  if (LOG_SECTIONS.indexOf(section) > -1 && LOG_LEVEL >= level) {
    console.log(section + ":" + msg);
  }
}

logit("message 1", "section1", 4); // will log
logit("message 2", "section2", 4); // will log
logit("message 3", "section3", 2); // wont log, below log level
logit("message 4", "section4", 4); // wont log, not in a log section

答案 3 :(得分:6)

只需使用\ r终止您的行:

process.stdout.write('text\r');

这是一个简单的示例(挂钟):

setInterval(() => process.stdout.write(`clock: ${new Date()}\r`), 1000);