Консоль
Модуль console предоставляет простую консоль отладки, аналогичную механизму консоли JavaScript, предоставляемому веб-браузерами.
Модуль экспортирует два конкретных компонента:
- Класс
Consoleс методами, такими какconsole.log(),console.error()иconsole.warn(), которые могут быть использованы для записи в любой поток Node.js. - Глобальный экземпляр
console, настроенный для записи вstdoutиstderr. Поскольку этот объект является глобальным, он может быть использован без вызоваrequire('console').
Пример использования глобального console:
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to stderr
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
Пример использования класса Console:
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err
Хотя API класса Console в основе своей разработан на базе объекта браузера console, объект Console в Node.js не предназначен для точного дублирования функциональности браузера.
Асинхронные и синхронные консоли
Функции консоли обычно асинхронны, за исключением случаев, когда местом назначения является файл. Диски быстрые, и операционные системы обычно используют кэширование с обратной записью; блокировка записи должна быть очень редким явлением, но это возможно.
Кроме того, функции консоли блокируют выполнение при выводе в TTY (терминалы) в macOS в качестве обходного решения для очень небольшого буфера размером 1 КБ в ОС. Это сделано для предотвращения переплетения между stdout и stderr.
Класс: Консоль
Класс Console может быть использован для создания простого регистратора с настраиваемыми потоками вывода и доступен с помощью require('console').Console или console.Console:
const Console = require('console').Console;
const Console = console.Console;
new Console(stdout[, stderr])
Создаёт новую Console, передавая один или два экземпляра потоков на запись. stdout — это поток на запись для вывода журнальных или информационных сообщений. stderr используется для предупреждений или ошибок. Если stderr не передан, предупреждения и сообщения об ошибках будут отправлены в stdout.
const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// custom simple logger
const logger = new Console(output, errorOutput);
// use it like console
const count = 5;
logger.log('count: %d', count);
// in stdout.log: count 5
Глобальная переменная console — это специальный Console, вывод которого отправляется в process.stdout и process.stderr. Это эквивалентно вызову:
new Console(process.stdout, process.stderr);
console.assert(value[, message][, ...])
Простой тест утверждения, проверяющий, является ли value истинным значением. Если нет, выбрасывается AssertionError. Если предоставлено, сообщение об ошибке message форматируется с помощью util.format() и используется в качестве сообщения об ошибке.
console.assert(true, 'does nothing'); // OK console.assert(false, 'Whoops %s', 'didn\'t work'); // AssertionError: Whoops didn't work
Примечание: метод console.assert() реализован в Node.js иначе, чем метод console.assert() доступный в браузерах.
В частности, в браузерах вызов console.assert() с ложным утверждением приведет к выводу message в консоль без прерывания выполнения последующего кода. В Node.js, однако, ложное утверждение вызовет исключение AssertionError.
Функциональность, приближающаяся к той, которая реализована в браузерах, может быть реализована путем расширения console Node.js и переопределения метода console.assert().
В следующем примере создается простой модуль, который расширяет и переопределяет поведение по умолчанию console в Node.js.
'use strict';
// Creates a simple extension of console with a
// new impl for assert without monkey-patching.
const myConsole = Object.create(console, {
assert: {
value: function assert(assertion, message, ...args) {
try {
console.assert(assertion, message, ...args);
} catch (err) {
console.error(err.stack);
}
},
configurable: true,
enumerable: true,
writable: true,
},
});
module.exports = myConsole;
Это можно использовать как прямую замену встроенной консоли:
const console = require('./myConsole');
console.assert(false, 'this message will print, but no error thrown');
console.log('this will also print');
console.dir(obj[, options])
Использует util.inspect() для obj и выводит полученную строку в stdout. Эта функция обходит любую пользовательскую функцию inspect() , определённую для obj . Дополнительный объект options может быть передан для изменения определенных аспектов отформатированной строки:
-
showHidden— еслиtrue, то неперечисляемые и символьные свойства объекта также будут показаны. По умолчаниюfalse. -
depth— сообщаетutil.inspect()сколько раз рекурсировать при форматировании объекта. Это полезно для проверки больших сложных объектов. По умолчанию2. Для бесконечной рекурсии передайтеnull. -
colors— еслиtrue, то вывод будет стилизован с помощью кодов ANSI-цветов. По умолчаниюfalse. Цвета настраиваются; см. настройка цветовutil.inspect().
console.error([data][, ...])
Выводит в stderr с новой строкой. Можно передать несколько аргументов, первый используется как основное сообщение, а все остальные как значения подстановки, аналогично printf(3) (аргументы передаются в util.format()).
const code = 5;
console.error('error #%d', code);
// Prints: error #5, to stderr
console.error('error', code);
// Prints: error 5, to stderr
Если элементы форматирования (например, %d) не найдены в первой строке, то для каждого аргумента вызывается util.inspect(), а полученные строковые значения конкатенируются. Подробнее см. util.format().
console.info([data][, ...])
Функция console.info() — это псевдоним для console.log().
console.log([data][, ...])
Выводит в stdout с новой строкой. Можно передать несколько аргументов, первый используется как основное сообщение, а все остальные как значения подстановки, аналогично printf(3) (аргументы передаются в util.format()).
const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout
Если элементы форматирования (например, %d) не найдены в первой строке, то для каждого аргумента вызывается util.inspect(), а полученные строковые значения конкатенируются. Подробнее см. util.format().
console.time(label)
Используется для расчета продолжительности определённой операции. Для запуска таймера вызовите метод console.time(), передав ему уникальное label в качестве единственного параметра. Для остановки таймера и получения затраченного времени в миллисекундах просто вызовите метод console.timeEnd(), снова передав уникальное label в качестве параметра.
console.timeEnd(label)
Останавливает таймер, ранее запущенный вызовом console.time(), и выводит результат в stdout:
console.time('100-elements');
for (let i = 0; i < 100; i++) {
;
}
console.timeEnd('100-elements');
// prints 100-elements: 262ms
console.trace(message[, ...])
Выводит в stderr строку 'Trace :', за которой следует отформатированное сообщение util.format() и трассировку стека до текущей позиции в коде.
console.trace('Show me');
// Prints: (stack trace will vary based on where trace is called)
// Trace: Show me
// at repl:2:9
// at REPLServer.defaultEval (repl.js:248:27)
// at bound (domain.js:287:14)
// at REPLServer.runBound [as eval] (domain.js:300:12)
// at REPLServer.<anonymous> (repl.js:412:12)
// at emitOne (events.js:82:20)
// at REPLServer.emit (events.js:169:7)
// at REPLServer.Interface._onLine (readline.js:210:10)
// at REPLServer.Interface._line (readline.js:549:8)
// at REPLServer.Interface._ttyWrite (readline.js:826:14)
console.warn([data][, ...])
Функция console.warn() — это псевдоним для console.error().
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v4.x/docs/api/console.html