Подтвердить что ты не робот

Node.js console.log - Возможно ли обновить строку, а не создать новую строку?

В моем приложении node.js есть много консольных журналов, которые важны для меня (это довольно большое приложение, которое длится долгое время, и мне нужно знать, что все еще продолжается), но я заканчиваю с тысячами строк консольных журналов.

Как-то возможно сделать console.update, который стирает/заменяет консольную строку, а не создает новую строку?

4b9b3361

Ответ 1

Попробуйте использовать методы process.stdout вместо этого на консоли:

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

Ответ 2

После ответа @michelek вы можете использовать функцию примерно так:

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

Ответ 3

Конечно, вы можете сделать это, используя модуль, который я помог создать: 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");

Причал не очень полезен, когда используется на нем. Это намного эффективнее, если вы построите некоторую абстракцию поверх нее, чтобы ваши звонки на причале были менее подробными.

Посмотрите, как я использую причал в fknsrs/bento для получения дополнительных примеров использования.

Ответ 4

Чтобы написать частичную строку.

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

Ответ 5

если вы видите исключения stdout, такие как TypeError: process.stdout.clearLine is not a function, в окне консоли отладки кода Visual Studio (или Webstorm), запустите приложение как приложение внешнего терминала вместо внутренней консоли. Причина в том, что окно консоли отладки не TTY (process.stdout.isTTY является ложным). Поэтому обновите конфигурацию запуска в launch.json с опцией "console": "externalTerminal".