it-swarm.com.de

Node.js console.log - Ist es möglich, eine Zeile zu aktualisieren, anstatt eine neue Zeile zu erstellen?

Mein node.js application hat viele Konsolenprotokolle, die für mich wichtig sind (es ist eine ziemlich große App, die sehr lange läuft und ich muss wissen, dass die Dinge immer noch im Gange sind), aber am Ende stehen mir Tausende von Zeilen zur Verfügung von Konsolenprotokollen.

Ist es irgendwie möglich, ein console.update, das eine Konsolenzeile löscht/ersetzt, anstatt eine neue Zeile zu erstellen?

53
JVG

Versuchen Sie, stattdessen auf der Konsole mit process.stdout-Methoden zu spielen:

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

Wenn Sie der Antwort von @ michelek folgen, können Sie eine Funktion wie die folgende verwenden:

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

Natürlich können Sie dies mit einem Modul tun, das ich erstellt habe: fknsrs/jetty

Installieren Sie über

npm install jetty

Hier ist ein Anwendungsbeispiel

// 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");

Der Steg ist nicht besonders nützlich, wenn er alleine benutzt wird. Es ist viel effektiver, wenn Sie eine Abstraktion darauf aufbauen, um Ihre Anlegestellenanrufe weniger ausführlich zu gestalten.

Sehen Sie sich an, wie ich Jetty in fknsrs/bento verwende, um weitere Verwendungsbeispiele zu erhalten.

15
user633183

Eine Teilzeile schreiben.

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

Wenn das Ausgabevolumen das eigentliche Problem ist, sollten Sie Ihre Protokollierung wahrscheinlich überdenken. Sie können ein Protokollierungssystem verwenden, mit dem die selektive Laufzeitprotokollierung Ihre Ausgabe auf das eingrenzen kann, was Sie benötigen.

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