Node.js console.log – 是否可以更新一行而不是创build一个新行?

我的node.js应用程序有很多控制台日志,这对我来说很重要(这是一个相当大的应用程序,所以运行了很长时间,我需要知道事情还在进行中),但是我最终会遇到成千上万控制台日志的行。

是不是有可能做一个console.update擦除/replace控制台线,而不是创build一个新的行?

尝试使用process.stdout方法,而不是在控制台上玩:

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

当然,你可以使用我创build的模块做到这一点: 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在使用时并不是非常有用。 当你在它上面build立一些抽象以使你的docker呼叫不那么冗长的时候,它会更加有效。

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

在@ michelek的回答之后,你可以使用一个像这样的函数:

 function printProgress(progress){ process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(progress + '%'); } 

写一个部分行。

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

如果输出量是真正的问题,那么你可能会重新考虑你的日志logging。 您可以使用一个日志logging系统,允许select性的运行日志logging来缩小您的输出到你所需要的。

 // 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