{ "source": "doc/api/console.md", "modules": [ { "textRaw": "Console", "name": "console", "stability": 2, "stabilityText": "Stable", "desc": "

The console module provides a simple debugging console that is similar to the\nJavaScript console mechanism provided by web browsers.

\n

The module exports two specific components:

\n\n

Example using the global console:

\n
console.log('hello world');\n  // Prints: hello world, to stdout\nconsole.log('hello %s', 'world');\n  // Prints: hello world, to stdout\nconsole.error(new Error('Whoops, something bad happened'));\n  // Prints: [Error: Whoops, something bad happened], to stderr\n\nconst name = 'Will Robinson';\nconsole.warn(`Danger ${name}! Danger!`);\n  // Prints: Danger Will Robinson! Danger!, to stderr\n
\n

Example using the Console class:

\n
const out = getStreamSomehow();\nconst err = getStreamSomehow();\nconst myConsole = new console.Console(out, err);\n\nmyConsole.log('hello world');\n  // Prints: hello world, to out\nmyConsole.log('hello %s', 'world');\n  // Prints: hello world, to out\nmyConsole.error(new Error('Whoops, something bad happened'));\n  // Prints: [Error: Whoops, something bad happened], to err\n\nconst name = 'Will Robinson';\nmyConsole.warn(`Danger ${name}! Danger!`);\n  // Prints: Danger Will Robinson! Danger!, to err\n
\n

While the API for the Console class is designed fundamentally around the\nbrowser console object, the Console in Node.js is not intended to\nduplicate the browser's functionality exactly.

\n", "modules": [ { "textRaw": "Asynchronous vs Synchronous Consoles", "name": "asynchronous_vs_synchronous_consoles", "desc": "

The console functions are usually asynchronous unless the destination is a file.\nDisks are fast and operating systems normally employ write-back caching;\nit should be a very rare occurrence indeed that a write blocks, but it\nis possible.

\n

Additionally, console functions are blocking when outputting to TTYs\n(terminals) on OS X as a workaround for the OS's very small, 1kb buffer size.\nThis is to prevent interleaving between stdout and stderr.

\n", "type": "module", "displayName": "Asynchronous vs Synchronous Consoles" } ], "classes": [ { "textRaw": "Class: Console", "type": "class", "name": "Console", "desc": "

The Console class can be used to create a simple logger with configurable\noutput streams and can be accessed using either require('console').Console\nor console.Console:

\n
const Console = require('console').Console;\nconst Console = console.Console;\n
\n", "methods": [ { "textRaw": "console.assert(value[, message][, ...])", "type": "method", "name": "assert", "meta": { "added": [ "v0.1.101" ] }, "desc": "

A simple assertion test that verifies whether value is truthy. If it is not,\nan AssertionError is thrown. If provided, the error message is formatted\nusing [util.format()][] and used as the error message.

\n
console.assert(true, 'does nothing');\n  // OK\nconsole.assert(false, 'Whoops %s', 'didn\\'t work');\n  // AssertionError: Whoops didn't work\n
\n

Note: the console.assert() method is implemented differently in Node.js\nthan the console.assert() method [available in browsers][web-api-assert].

\n

Specifically, in browsers, calling console.assert() with a falsy\nassertion will cause the message to be printed to the console without\ninterrupting execution of subsequent code. In Node.js, however, a falsy\nassertion will cause an AssertionError to be thrown.

\n

Functionality approximating that implemented by browsers can be implemented\nby extending Node.js' console and overriding the console.assert() method.

\n

In the following example, a simple module is created that extends and overrides\nthe default behavior of console in Node.js.

\n
'use strict';\n\n// Creates a simple extension of console with a\n// new impl for assert without monkey-patching.\nconst myConsole = Object.setPrototypeOf({\n  assert(assertion, message, ...args) {\n    try {\n      console.assert(assertion, message, ...args);\n    } catch (err) {\n      console.error(err.stack);\n    }\n  }\n}, console);\n\nmodule.exports = myConsole;\n
\n

This can then be used as a direct replacement for the built in console:

\n
const console = require('./myConsole');\nconsole.assert(false, 'this message will print, but no error thrown');\nconsole.log('this will also print');\n
\n", "signatures": [ { "params": [ { "name": "value" }, { "name": "message", "optional": true }, { "name": "...", "optional": true } ] } ] }, { "textRaw": "console.dir(obj[, options])", "type": "method", "name": "dir", "meta": { "added": [ "v0.1.101" ] }, "desc": "

Uses [util.inspect()][] on obj and prints the resulting string to stdout.\nThis function bypasses any custom inspect() function defined on obj. An\noptional options object may be passed to alter certain aspects of the\nformatted string:

\n\n", "signatures": [ { "params": [ { "name": "obj" }, { "name": "options", "optional": true } ] } ] }, { "textRaw": "console.error([data][, ...])", "type": "method", "name": "error", "meta": { "added": [ "v0.1.100" ] }, "desc": "

Prints to stderr with newline. Multiple arguments can be passed, with the\nfirst used as the primary message and all additional used as substitution\nvalues similar to printf(3) (the arguments are all passed to\n[util.format()][]).

\n
const code = 5;\nconsole.error('error #%d', code);\n  // Prints: error #5, to stderr\nconsole.error('error', code);\n  // Prints: error 5, to stderr\n
\n

If formatting elements (e.g. %d) are not found in the first string then\n[util.inspect()][] is called on each argument and the resulting string\nvalues are concatenated. See [util.format()][] for more information.

\n", "signatures": [ { "params": [ { "name": "data", "optional": true }, { "name": "...", "optional": true } ] } ] }, { "textRaw": "console.info([data][, ...])", "type": "method", "name": "info", "meta": { "added": [ "v0.1.100" ] }, "desc": "

The console.info() function is an alias for [console.log()][].

\n", "signatures": [ { "params": [ { "name": "data", "optional": true }, { "name": "...", "optional": true } ] } ] }, { "textRaw": "console.log([data][, ...])", "type": "method", "name": "log", "meta": { "added": [ "v0.1.100" ] }, "desc": "

Prints to stdout with newline. Multiple arguments can be passed, with the\nfirst used as the primary message and all additional used as substitution\nvalues similar to printf(3) (the arguments are all passed to\n[util.format()][]).

\n
var count = 5;\nconsole.log('count: %d', count);\n  // Prints: count: 5, to stdout\nconsole.log('count: ', count);\n  // Prints: count: 5, to stdout\n
\n

If formatting elements (e.g. %d) are not found in the first string then\n[util.inspect()][] is called on each argument and the resulting string\nvalues are concatenated. See [util.format()][] for more information.

\n", "signatures": [ { "params": [ { "name": "data", "optional": true }, { "name": "...", "optional": true } ] } ] }, { "textRaw": "console.time(label)", "type": "method", "name": "time", "meta": { "added": [ "v0.1.104" ] }, "desc": "

Starts a timer that can be used to compute the duration of an operation. Timers\nare identified by a unique label. Use the same label when you call\n[console.timeEnd()][] to stop the timer and output the elapsed time in\nmilliseconds to stdout. Timer durations are accurate to the sub-millisecond.

\n", "signatures": [ { "params": [ { "name": "label" } ] } ] }, { "textRaw": "console.timeEnd(label)", "type": "method", "name": "timeEnd", "meta": { "added": [ "v0.1.104" ] }, "desc": "

Stops a timer that was previously started by calling [console.time()][] and\nprints the result to stdout:

\n
console.time('100-elements');\nfor (var i = 0; i < 100; i++) {\n  ;\n}\nconsole.timeEnd('100-elements');\n// prints 100-elements: 225.438ms\n
\n

Note: As of Node.js v6.0.0, console.timeEnd() deletes the timer to avoid\nleaking it. On older versions, the timer persisted. This allowed\nconsole.timeEnd() to be called multiple times for the same label. This\nfunctionality was unintended and is no longer supported.

\n", "signatures": [ { "params": [ { "name": "label" } ] } ] }, { "textRaw": "console.trace(message[, ...])", "type": "method", "name": "trace", "meta": { "added": [ "v0.1.104" ] }, "desc": "

Prints to stderr the string 'Trace :', followed by the [util.format()][]\nformatted message and stack trace to the current position in the code.

\n
console.trace('Show me');\n  // Prints: (stack trace will vary based on where trace is called)\n  //  Trace: Show me\n  //    at repl:2:9\n  //    at REPLServer.defaultEval (repl.js:248:27)\n  //    at bound (domain.js:287:14)\n  //    at REPLServer.runBound [as eval] (domain.js:300:12)\n  //    at REPLServer.<anonymous> (repl.js:412:12)\n  //    at emitOne (events.js:82:20)\n  //    at REPLServer.emit (events.js:169:7)\n  //    at REPLServer.Interface._onLine (readline.js:210:10)\n  //    at REPLServer.Interface._line (readline.js:549:8)\n  //    at REPLServer.Interface._ttyWrite (readline.js:826:14)\n
\n", "signatures": [ { "params": [ { "name": "message" }, { "name": "...", "optional": true } ] } ] }, { "textRaw": "console.warn([data][, ...])", "type": "method", "name": "warn", "meta": { "added": [ "v0.1.100" ] }, "desc": "

The console.warn() function is an alias for [console.error()][].

\n", "signatures": [ { "params": [ { "name": "data", "optional": true }, { "name": "...", "optional": true } ] } ] } ], "signatures": [ { "params": [ { "name": "stdout" }, { "name": "stderr", "optional": true } ], "desc": "

Creates a new Console by passing one or two writable stream instances.\nstdout is a writable stream to print log or info output. stderr\nis used for warning or error output. If stderr isn't passed, warning and error\noutput will be sent to stdout.

\n
const output = fs.createWriteStream('./stdout.log');\nconst errorOutput = fs.createWriteStream('./stderr.log');\n// custom simple logger\nconst logger = new Console(output, errorOutput);\n// use it like console\nvar count = 5;\nlogger.log('count: %d', count);\n// in stdout.log: count 5\n
\n

The global console is a special Console whose output is sent to\n[process.stdout][] and [process.stderr][]. It is equivalent to calling:

\n
new Console(process.stdout, process.stderr);\n
\n" } ] } ], "type": "module", "displayName": "Console" } ] }