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

Nodejs-console.error vs util.debug

Я заметил, что node.js имеет как console.error, так и util.debug, а также console.log и util.log.

Есть ли разница, кроме консоли. * Функции более надежны в параметрах, которые они принимают? API говорит, что они пишут в stdout и stderr соответственно.

Если нет никакой разницы, которую я должен использовать и почему?

4b9b3361

Ответ 1

Это две разные функции, которые выполняют две разные вещи. Научитесь читать источник. Это поможет вам много (даже на таких языках, как С# с отражателем).

Источники

Консоль

https://github.com/joyent/node/blob/master/lib/console.js

Console.prototype.warn = function() {
  this._stderr.write(util.format.apply(this, arguments) + '\n');
};

Console.prototype.error = Console.prototype.warn;

Utils

https://github.com/joyent/node/blob/master/lib/util.js

exports.debug = function(x) {
  process.stderr.write('DEBUG: ' + x + '\n');
};

Функции журнала:

Консоль

exports.log = function() {
  process.stdout.write(format.apply(this, arguments) + '\n');
};

Utils

exports.log = function(msg) {
  exports.puts(timestamp() + ' - ' + msg.toString());
};
exports.puts = function() {
  for (var i = 0, len = arguments.length; i < len; ++i) {
    process.stdout.write(arguments[i] + '\n');
  }
};

Почему

Как и в любой другой ориентированной на Unix системе, которая node наиболее определенно ориентирована в образе - см. много комментариев Райана по этой теме, функции ведения журнала приведены в том же обличье. Существует два основных класса для ведения журнала, и оба они делают то же самое, но по разным причинам. Для случайного наблюдателя они одинаковы, но на самом деле это не так.

Ведение журнала консоли предназначено для использования во время отладки. Это перейдет в STDOUT и покажет ваши инструкции на консоли REPL 1 полезной для отладки.

Запись служебных данных предназначена для использования во время выполнения стандартных служб. Они перейдут в процесс STDOUT, который часто является файлом журнала для процесса.

Но поскольку это может быть внешне переопределено по мере необходимости и потому, что в будущем (скорее всего) для процессов Windows (с учетом новых портов и разработок) и других систем оно будет отличаться, то вы должны попытаться использовать эти методы как фактический способ записи в журналы во время нормальной работы. Примеры того, как они будут отличаться в Windows, включают использование системного журнала для ведения журнала, в отличие от прямого файла журнала.

Итак, как вы знаете, какой из них вам нужен?

Если вы планируете запустить это в REPL для отладки, используйте консольный регистратор. Если вы намереваетесь запустить службу и забыть об этом, используйте протокол utils.

1 – Прочитать оценку цикла печати

Ответ 2

Комментарий Джо Лаппа к принятому в данный момент ответу заслуживает ответа:

FYI: utils.print,.puts,.debug и .error теперь устарели. console.log рекомендуется вместо .print и .puts, а console.error рекомендуется вместо .debug и .error. См. Код utils

Литература:

Документы Node.js

Текущий код utils

Ответ 3

Консольные методы более надежны в том, что вы можете передавать n аргументов, и они будут объединены до того, как будут записаны в stdout или stderr, но оба они являются обертками для удобства вокруг тех же базовых вызовов stdout и stderr.

.log,.info и .dir не блокируются.
.warn и .error блокируются.

console.log и util.log как писать, используя process.stdout.write. console.error и util.debug записываются с использованием process.binding( "stdio" ). writeError.