Skip to content

Console

[Stable: 2 - Stable]

Stable: 2 Стабильность: 2 - Стабильный

Исходный код: lib/console.js

Модуль node:console предоставляет простую консоль отладки, похожую на механизм консоли JavaScript, предоставляемый веб-браузерами.

Модуль экспортирует два конкретных компонента:

  • Класс Console с такими методами, как console.log(), console.error() и console.warn(), которые можно использовать для записи в любой поток Node.js.
  • Глобальный экземпляр console, настроенный для записи в process.stdout и process.stderr. Глобальный console можно использовать без вызова require('node:console').

Предупреждение: Методы глобального объекта console не являются ни последовательно синхронными, как API браузера, на которые они похожи, ни последовательно асинхронными, как все другие потоки Node.js. Программы, которые хотят зависеть от синхронного / асинхронного поведения функций консоли, должны сначала выяснить природу потока поддержки консоли. Это связано с тем, что поток зависит от базовой платформы и стандартной конфигурации потока текущего процесса. Дополнительную информацию см. в примечании о вводе-выводе процесса.

Пример использования глобального console:

js
console.log('hello world')
// Выводит: hello world, в stdout
console.log('hello %s', 'world')
// Выводит: hello world, в stdout
console.error(new Error('Ой, случилось что-то плохое'))
// Выводит сообщение об ошибке и трассировку стека в stderr:
//   Error: Ой, случилось что-то плохое
//     at [eval]:5:15
//     at Script.runInThisContext (node:vm:132:18)
//     at Object.runInThisContext (node:vm:309:38)
//     at node:internal/process/execution:77:19
//     at [eval]-wrapper:6:22
//     at evalScript (node:internal/process/execution:76:60)
//     at node:internal/main/eval_string:23:3

const name = 'Уилл Робинсон'
console.warn(`Опасность ${name}! Опасность!`)
// Выводит: Опасность Уилл Робинсон! Опасность!, в stderr

Пример использования класса Console:

js
const out = getStreamSomehow()
const err = getStreamSomehow()
const myConsole = new console.Console(out, err)

myConsole.log('hello world')
// Выводит: hello world, в out
myConsole.log('hello %s', 'world')
// Выводит: hello world, в out
myConsole.error(new Error('Ой, случилось что-то плохое'))
// Выводит: [Error: Ой, случилось что-то плохое], в err

const name = 'Уилл Робинсон'
myConsole.warn(`Опасность ${name}! Опасность!`)
// Выводит: Опасность Уилл Робинсон! Опасность!, в err

Класс: Console

[История]

ВерсияИзменения
v8.0.0Ошибки, возникающие при записи в нижележащие потоки, теперь будут игнорироваться по умолчанию.

Класс Console можно использовать для создания простого логгера с настраиваемыми выходными потоками. Доступ к нему можно получить с помощью require('node:console').Console или console.Console (или их деструктурированных аналогов):

js
import { Console } from 'node:console'
js
const { Console } = require('node:console')
js
const { Console } = console

new Console(stdout[, stderr][, ignoreErrors])

new Console(options)

[История]

ВерсияИзменения
v14.2.0, v12.17.0Введена опция groupIndentation.
v11.7.0Введена опция inspectOptions.
v10.0.0Конструктор Console теперь поддерживает аргумент options, и введена опция colorMode.
v8.0.0Введена опция ignoreErrors.
  • options <Object>
    • stdout <stream.Writable>
    • stderr <stream.Writable>
    • ignoreErrors <boolean> Игнорировать ошибки при записи в нижележащие потоки. По умолчанию: true.
    • colorMode <boolean> | <string> Установить поддержку цвета для этого экземпляра Console. Значение true включает раскраску при проверке значений. Значение false отключает раскраску при проверке значений. Значение 'auto' делает поддержку цвета зависимой от значения свойства isTTY и значения, возвращаемого getColorDepth() для соответствующего потока. Эту опцию нельзя использовать, если также задано inspectOptions.colors. По умолчанию: 'auto'.
    • inspectOptions <Object> Указывает параметры, которые передаются в util.inspect().
    • groupIndentation <number> Установить отступ группы. По умолчанию: 2.

Создает новый Console с одним или двумя экземплярами записываемого потока. stdout является записываемым потоком для вывода логов или информации. stderr используется для вывода предупреждений или ошибок. Если stderr не указан, stdout используется для stderr.

js
import { createWriteStream } from 'node:fs'
import { Console } from 'node:console'
// Альтернативно
// const { Console } = console;

const output = createWriteStream('./stdout.log')
const errorOutput = createWriteStream('./stderr.log')
// Пользовательский простой логгер
const logger = new Console({ stdout: output, stderr: errorOutput })
// Используйте его как console
const count = 5
logger.log('count: %d', count)
// В stdout.log: count 5
js
const fs = require('node:fs')
const { Console } = require('node:console')
// Альтернативно
// const { Console } = console;

const output = fs.createWriteStream('./stdout.log')
const errorOutput = fs.createWriteStream('./stderr.log')
// Пользовательский простой логгер
const logger = new Console({ stdout: output, stderr: errorOutput })
// Используйте его как console
const count = 5
logger.log('count: %d', count)
// В stdout.log: count 5

Глобальный console - это специальный Console, вывод которого отправляется в process.stdout и process.stderr. Это эквивалентно вызову:

js
new Console({ stdout: process.stdout, stderr: process.stderr })

console.assert(value[, ...message])

[История]

ВерсияИзменения
v10.0.0Теперь реализация соответствует спецификации и больше не выбрасывает исключения.
v0.1.101Добавлено в: v0.1.101
  • value <any> Значение, проверяемое на истинность.
  • ...message <any> Все аргументы, кроме value, используются в качестве сообщения об ошибке.

console.assert() записывает сообщение, если value является ложным или пропущен. Он только записывает сообщение и не влияет на выполнение. Вывод всегда начинается с "Assertion failed". Если предоставлен, message форматируется с помощью util.format().

Если value является истинным, ничего не происходит.

js
console.assert(true, 'does nothing')

console.assert(false, 'Whoops %s work', "didn't")
// Assertion failed: Whoops didn't work

console.assert()
// Assertion failed

console.clear()

Добавлено в: v8.3.0

Когда stdout является TTY, вызов console.clear() попытается очистить TTY. Когда stdout не является TTY, этот метод ничего не делает.

Конкретная работа console.clear() может различаться в зависимости от операционной системы и типа терминала. Для большинства операционных систем Linux console.clear() работает аналогично команде оболочки clear. В Windows console.clear() очистит только вывод в текущем окне терминала для бинарного файла Node.js.

console.count([label])

Добавлено в: v8.3.0

  • label <string> Метка для счетчика. По умолчанию: 'default'.

Поддерживает внутренний счетчик, специфичный для label, и выводит в stdout количество раз, когда console.count() был вызван с данной label.

js
> console.count()
default: 1
undefined
> console.count('default')
default: 2
undefined
> console.count('abc')
abc: 1
undefined
> console.count('xyz')
xyz: 1
undefined
> console.count('abc')
abc: 2
undefined
> console.count()
default: 3
undefined
>

console.countReset([label])

Добавлено в: v8.3.0

  • label <string> Метка для отображения счетчика. По умолчанию: 'default'.

Сбрасывает внутренний счетчик, связанный с label.

js
> console.count('abc');
abc: 1
undefined
> console.countReset('abc');
undefined
> console.count('abc');
abc: 1
undefined
>

console.debug(data[, ...args])

[История]

ВерсияИзменения
v8.10.0console.debug теперь является псевдонимом для console.log.
v8.0.0Добавлено в: v8.0.0

Функция console.debug() является псевдонимом для console.log().

console.dir(obj[, options])

Добавлено в: v0.1.101

  • obj <any>
  • options <Object>
    • showHidden <boolean> Если true, то будут показаны также неперечисляемые и символьные свойства объекта. По умолчанию: false.
    • depth <number> Указывает util.inspect(), сколько раз рекурсивно вызывать при форматировании объекта. Это полезно для изучения больших сложных объектов. Чтобы рекурсивно вызывать бесконечно, передайте null. По умолчанию: 2.
    • colors <boolean> Если true, то вывод будет стилизован кодами цветов ANSI. Цвета настраиваются; см. настройка цветов util.inspect(). По умолчанию: false.

Использует util.inspect() для obj и выводит полученную строку в stdout. Эта функция обходит любую пользовательскую функцию inspect(), определенную в obj.

console.dirxml(...data)

[История]

ВерсияИзменения
v9.3.0console.dirxml теперь вызывает console.log для своих аргументов.
v8.0.0Добавлено в: v8.0.0

Этот метод вызывает console.log(), передавая ему полученные аргументы. Этот метод не создает никакого XML-форматирования.

console.error([data][, ...args])

Добавлено в: v0.1.100

Выводит в stderr с новой строкой. Можно передать несколько аргументов, при этом первый используется как основное сообщение, а все дополнительные используются как значения подстановки, аналогично printf(3) (все аргументы передаются в util.format()).

js
const code = 5
console.error('ошибка #%d', code)
// Выводит: ошибка #5, в stderr
console.error('ошибка', code)
// Выводит: ошибка 5, в stderr

Если элементы форматирования (например, %d) не найдены в первой строке, то для каждого аргумента вызывается util.inspect(), и результирующие строковые значения объединяются. Смотрите util.format() для получения дополнительной информации.

console.group([...label])

Добавлено в: v8.5.0

Увеличивает отступ последующих строк на пробелы на длину groupIndentation.

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

console.groupCollapsed()

Добавлено в: v8.5.0

Псевдоним для console.group().

console.groupEnd()

Добавлено в: v8.5.0

Уменьшает отступ последующих строк на пробелы на длину groupIndentation.

console.info([data][, ...args])

Добавлено в: v0.1.100

Функция console.info() является псевдонимом для console.log().

console.log([data][, ...args])

Добавлено в: v0.1.100

Выводит в stdout с новой строкой. Можно передавать несколько аргументов, причем первый используется в качестве основного сообщения, а все дополнительные используются в качестве значений подстановки, аналогично printf(3) (все аргументы передаются в util.format()).

js
const count = 5
console.log('count: %d', count)
// Выводит: count: 5, в stdout
console.log('count:', count)
// Выводит: count: 5, в stdout

См. util.format() для получения дополнительной информации.

console.table(tabularData[, properties])

Добавлено в: v10.0.0

  • tabularData <any>
  • properties <string[]> Альтернативные свойства для построения таблицы.

Попытайтесь построить таблицу со столбцами свойств tabularData (или используйте properties) и строками tabularData и записать ее в лог. Если невозможно разобрать как табличные данные, то просто выводит аргумент.

js
// Это нельзя разобрать как табличные данные
console.table(Symbol())
// Symbol()

console.table(undefined)
// undefined

console.table([
  { a: 1, b: 'Y' },
  { a: 'Z', b: 2 },
])
// ┌─────────┬─────┬─────┐
// │ (index) │ a   │ b   │
// ├─────────┼─────┼─────┤
// │ 0       │ 1   │ 'Y' │
// │ 1       │ 'Z' │ 2   │
// └─────────┴─────┴─────┘

console.table(
  [
    { a: 1, b: 'Y' },
    { a: 'Z', b: 2 },
  ],
  ['a']
)
// ┌─────────┬─────┐
// │ (index) │ a   │
// ├─────────┼─────┤
// │ 0       │ 1   │
// │ 1       │ 'Z' │
// └─────────┴─────┘

console.time([label])

Добавлено в: v0.1.104

  • label <string> По умолчанию: 'default'

Запускает таймер, который можно использовать для вычисления продолжительности операции. Таймеры идентифицируются уникальной меткой label. Используйте ту же самую метку label при вызове console.timeEnd(), чтобы остановить таймер и вывести прошедшее время в подходящих единицах времени в stdout. Например, если прошедшее время составляет 3869 мс, console.timeEnd() отобразит "3.869s".

console.timeEnd([label])

[История]

ВерсияИзменения
v13.0.0Прошедшее время отображается в подходящих единицах времени.
v6.0.0Этот метод больше не поддерживает несколько вызовов, не соответствующих отдельным вызовам console.time(); подробности см. ниже.
v0.1.104Добавлено в: v0.1.104
  • label <string> По умолчанию: 'default'

Останавливает таймер, который был ранее запущен путем вызова console.time(), и выводит результат в stdout:

js
console.time('bunch-of-stuff')
// Выполняем кучу всего.
console.timeEnd('bunch-of-stuff')
// Выведет: bunch-of-stuff: 225.438ms

console.timeLog([label][, ...data])

Добавлено в: v10.7.0

Для таймера, который был ранее запущен путем вызова console.time(), выводит прошедшее время и другие аргументы data в stdout:

js
console.time('process')
const value = expensiveProcess1() // Возвращает 42
console.timeLog('process', value)
// Выведет "process: 365.227ms 42".
doExpensiveProcess2(value)
console.timeEnd('process')

console.trace([message][, ...args])

Добавлено в: v0.1.104

Выводит в stderr строку 'Trace: ', за которой следует отформатированное сообщение util.format() и трассировка стека до текущей позиции в коде.

js
console.trace('Show me')
// Выведет: (трассировка стека будет отличаться в зависимости от того, где вызывается trace)
//  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][, ...args])

Добавлено в: v0.1.100

Функция console.warn() является псевдонимом для console.error().

Методы только для инспектора

Следующие методы предоставляются движком V8 в общем API, но ничего не отображают, если не используются в сочетании с инспектором (флаг --inspect).

console.profile([label])

Добавлено в: v8.0.0

Этот метод ничего не отображает, если не используется в инспекторе. Метод console.profile() запускает профилирование ЦП JavaScript с необязательной меткой до вызова console.profileEnd(). Затем профиль добавляется в панель Профиль инспектора.

js
console.profile('MyLabel')
// Какой-то код
console.profileEnd('MyLabel')
// Добавляет профиль 'MyLabel' на панель "Профили" инспектора.

console.profileEnd([label])

Добавлено в: v8.0.0

Этот метод ничего не отображает, если не используется в инспекторе. Останавливает текущую сессию профилирования ЦП JavaScript, если она была запущена, и выводит отчет на панель Профили инспектора. См. console.profile() для примера.

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

console.timeStamp([label])

Добавлено в: v8.0.0

Этот метод ничего не отображает, если не используется в инспекторе. Метод console.timeStamp() добавляет событие с меткой 'label' на панель Хронология инспектора.