Mi node.js
aplicación tiene muchos registros de consola, que es importante para mí ver (es una aplicación bastante grande, por lo que se ejecuta durante mucho tiempo y necesito saber que las cosas aún están progresando) pero estoy terminando con miles de líneas de registros de la consola.
¿Es posible de alguna manera hacer algo console.update
que borre / reemplace una línea de consola en lugar de crear una nueva línea?
javascript
node.js
JVG
fuente
fuente
Respuestas:
Intente jugar con los métodos process.stdout en su lugar en la consola:
process.stdout.write("Hello, World"); process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write("\n"); // end the line
fuente
webstorm=true
en los parámetros de la aplicación en la configuración del nodo webstorm y verificar elprocess.argv.find(x => x.startsWith('webstorm=true')
uso de esta respuestaif (process.stdout.clearLine) { process.stdout.clearLine() }
?node -e "for(let i=1;i<=1000;i++){process.stdout.write('Hello, World'); if(i<10)process.stdout.clearLine(); process.stdout.cursorTo(0);}"
onode -e "for(let i=1;i<=1000;i++){process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write('hello, world')}"
Siguiendo la respuesta de @ michelek, puede usar una función como esta:
function printProgress(progress){ process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(progress + '%'); }
fuente
process.stdout.clearLine()
Claro, puedes hacer esto usando un módulo que ayudé a crear: fknsrs / jetty
Instalar a través de
Aquí hay un ejemplo de uso
// 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 no es muy útil cuando se usa solo. Es mucho más efectivo cuando construyes algo de abstracción encima para hacer que tus llamadas al embarcadero sean menos detalladas.
fuente
Escribir una línea parcial.
process.stdout.write("text"); process.stdout.write("more"); process.stdout.write("\n"); // end the line
Si el volumen de salida es el problema real, probablemente reconsidere su registro. Puede utilizar un sistema de registro que permita el registro en tiempo de ejecución selectivo para limitar su salida a lo que necesita.
// 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
fuente
Simplemente use \ r para terminar su línea:
process.stdout.write('text\r');
Aquí hay un ejemplo simple (reloj de pared):
setInterval(() => process.stdout.write(`clock: ${new Date()}\r`), 1000);
fuente
Si ve excepciones de stdout como
TypeError: process.stdout.clearLine is not a function
en la ventana Debug Console de Visual Studio Code (o Webstorm), ejecute la aplicación como una aplicación de terminal externa en lugar de una consola interna. La razón es que la ventana de la consola de depuración no es TTY (process.stdout.isTTY
es falsa). Por lo tanto, actualice su configuración de lanzamientolaunch.json
con la"console": "externalTerminal"
opción.fuente