2015-04-10 11:30:32 +02:00
|
|
|
# Console
|
2012-02-27 20:09:34 +01:00
|
|
|
|
2015-02-25 01:15:26 +01:00
|
|
|
Stability: 2 - Stable
|
2012-03-03 00:14:03 +01:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
The `console` module provides a simple debugging console that is similar to the
|
|
|
|
JavaScript console mechanism provided by web browsers.
|
2015-04-10 11:30:32 +02:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
The module exports two specific components:
|
2015-04-10 11:30:32 +02:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
* A `Console` class with methods such as `console.log()`, `console.error()` and
|
|
|
|
`console.warn()` that can be used to write to any Node.js stream.
|
|
|
|
* A global `console` instance configured to write to `stdout` and `stderr`.
|
|
|
|
Because this object is global, it can be used without calling
|
|
|
|
`require('console')`.
|
|
|
|
|
|
|
|
Example using the global `console`:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
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
|
|
|
|
```
|
2015-12-26 18:13:23 +01:00
|
|
|
|
|
|
|
Example using the `Console` class:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const out = getStreamSomehow();
|
|
|
|
const err = getStreamSomehow();
|
|
|
|
const myConsole = new console.Console(out, err);
|
2015-12-26 18:13:23 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
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
|
2015-12-26 18:13:23 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
const name = 'Will Robinson';
|
|
|
|
myConsole.warn(`Danger ${name}! Danger!`);
|
|
|
|
// Prints: Danger Will Robinson! Danger!, to err
|
|
|
|
```
|
2015-12-26 18:13:23 +01:00
|
|
|
|
|
|
|
While the API for the `Console` class is designed fundamentally around the
|
2016-03-10 00:26:34 +01:00
|
|
|
browser `console` object, the `Console` in Node.js is *not* intended to
|
|
|
|
duplicate the browser's functionality exactly.
|
2015-12-26 18:13:23 +01:00
|
|
|
|
|
|
|
## Asynchronous vs Synchronous Consoles
|
|
|
|
|
2016-05-20 16:20:08 +02:00
|
|
|
The console functions are usually asynchronous unless the destination is a file.
|
2016-02-07 23:15:03 +01:00
|
|
|
Disks are fast and operating systems normally employ write-back caching;
|
|
|
|
it should be a very rare occurrence indeed that a write blocks, but it
|
|
|
|
is possible.
|
2015-04-10 11:30:32 +02:00
|
|
|
|
2016-05-20 16:20:08 +02:00
|
|
|
Additionally, console functions are blocking when outputting to TTYs
|
|
|
|
(terminals) on OS X as a workaround for the OS's very small, 1kb buffer size.
|
|
|
|
This is to prevent interleaving between `stdout` and `stderr`.
|
|
|
|
|
2015-11-04 16:51:43 +01:00
|
|
|
## Class: Console
|
|
|
|
|
|
|
|
<!--type=class-->
|
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
The `Console` class can be used to create a simple logger with configurable
|
|
|
|
output streams and can be accessed using either `require('console').Console`
|
|
|
|
or `console.Console`:
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const Console = require('console').Console;
|
|
|
|
const Console = console.Console;
|
|
|
|
```
|
2015-11-04 16:51:43 +01:00
|
|
|
|
|
|
|
### new Console(stdout[, stderr])
|
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
Creates a new `Console` by passing one or two writable stream instances.
|
2015-11-04 16:51:43 +01:00
|
|
|
`stdout` is a writable stream to print log or info output. `stderr`
|
2016-03-10 00:26:34 +01:00
|
|
|
is used for warning or error output. If `stderr` isn't passed, warning and error
|
|
|
|
output will be sent to `stdout`.
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
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
|
|
|
|
var count = 5;
|
|
|
|
logger.log('count: %d', count);
|
|
|
|
// in stdout.log: count 5
|
|
|
|
```
|
2015-11-04 16:51:43 +01:00
|
|
|
|
|
|
|
The global `console` is a special `Console` whose output is sent to
|
2016-02-14 18:01:45 +01:00
|
|
|
[`process.stdout`][] and [`process.stderr`][]. It is equivalent to calling:
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
new Console(process.stdout, process.stderr);
|
|
|
|
```
|
2015-11-04 16:51:43 +01:00
|
|
|
|
|
|
|
### console.assert(value[, message][, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.101
|
|
|
|
-->
|
2013-03-23 15:38:17 +01:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
A simple assertion test that verifies whether `value` is truthy. If it is not,
|
2016-02-14 18:01:45 +01:00
|
|
|
an `AssertionError` is thrown. If provided, the error `message` is formatted
|
2015-12-26 18:13:23 +01:00
|
|
|
using [`util.format()`][] and used as the error message.
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
console.assert(true, 'does nothing');
|
|
|
|
// OK
|
|
|
|
console.assert(false, 'Whoops %s', 'didn\'t work');
|
|
|
|
// AssertionError: Whoops didn't work
|
|
|
|
```
|
2012-04-21 19:55:14 +02:00
|
|
|
|
2016-04-12 20:27:29 +02:00
|
|
|
*Note: the `console.assert()` method is implemented differently in Node.js
|
2016-04-21 00:12:40 +02:00
|
|
|
than the `console.assert()` method [available in browsers][web-api-assert].*
|
2016-04-12 20:27:29 +02:00
|
|
|
|
|
|
|
Specifically, in browsers, calling `console.assert()` with a falsy
|
|
|
|
assertion will cause the `message` to be printed to the console without
|
|
|
|
interrupting execution of subsequent code. In Node.js, however, a falsy
|
|
|
|
assertion will cause an `AssertionError` to be thrown.
|
|
|
|
|
|
|
|
Functionality approximating that implemented by browsers can be implemented
|
|
|
|
by extending Node.js' `console` and overriding the `console.assert()` method.
|
|
|
|
|
|
|
|
In the following example, a simple module is created that extends and overrides
|
|
|
|
the default behavior of `console` in Node.js.
|
|
|
|
|
|
|
|
```js
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
// Creates a simple extension of console with a
|
|
|
|
// new impl for assert without monkey-patching.
|
|
|
|
const myConsole = Object.setPrototypeOf({
|
|
|
|
assert(assertion, message, ...args) {
|
|
|
|
try {
|
|
|
|
console.assert(assertion, message, ...args);
|
|
|
|
} catch (err) {
|
|
|
|
console.error(err.stack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, console);
|
|
|
|
|
|
|
|
module.exports = myConsole;
|
|
|
|
```
|
|
|
|
|
|
|
|
This can then be used as a direct replacement for the built in console:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const console = require('./myConsole');
|
|
|
|
console.assert(false, 'this message will print, but no error thrown');
|
|
|
|
console.log('this will also print');
|
|
|
|
```
|
|
|
|
|
2015-04-10 11:30:32 +02:00
|
|
|
### console.dir(obj[, options])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.101
|
|
|
|
-->
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2016-02-14 18:01:45 +01:00
|
|
|
Uses [`util.inspect()`][] on `obj` and prints the resulting string to `stdout`.
|
2015-12-26 18:13:23 +01:00
|
|
|
This function bypasses any custom `inspect()` function defined on `obj`. An
|
2016-02-14 18:01:45 +01:00
|
|
|
optional `options` object may be passed to alter certain aspects of the
|
2015-12-26 18:13:23 +01:00
|
|
|
formatted string:
|
2014-06-08 11:14:14 +02:00
|
|
|
|
2015-01-07 22:54:25 +01:00
|
|
|
- `showHidden` - if `true` then the object's non-enumerable and symbol
|
|
|
|
properties will be shown too. Defaults to `false`.
|
2014-06-08 11:14:14 +02:00
|
|
|
|
2016-02-14 18:01:45 +01:00
|
|
|
- `depth` - tells [`util.inspect()`][] how many times to recurse while
|
|
|
|
formatting the object. This is useful for inspecting large complicated objects.
|
|
|
|
Defaults to `2`. To make it recurse indefinitely, pass `null`.
|
2014-06-08 11:14:14 +02:00
|
|
|
|
|
|
|
- `colors` - if `true`, then the output will be styled with ANSI color codes.
|
2015-12-10 05:19:30 +01:00
|
|
|
Defaults to `false`. Colors are customizable; see
|
|
|
|
[customizing `util.inspect()` colors][].
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2015-11-04 16:51:43 +01:00
|
|
|
### console.error([data][, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.100
|
|
|
|
-->
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-02-14 18:01:45 +01:00
|
|
|
Prints to `stderr` with newline. Multiple arguments can be passed, with the
|
|
|
|
first used as the primary message and all additional used as substitution
|
|
|
|
values similar to `printf(3)` (the arguments are all passed to
|
2015-12-26 18:13:23 +01:00
|
|
|
[`util.format()`][]).
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const code = 5;
|
|
|
|
console.error('error #%d', code);
|
|
|
|
// Prints: error #5, to stderr
|
|
|
|
console.error('error', code);
|
|
|
|
// Prints: error 5, to stderr
|
|
|
|
```
|
2015-12-26 18:13:23 +01:00
|
|
|
|
|
|
|
If formatting elements (e.g. `%d`) are not found in the first string then
|
|
|
|
[`util.inspect()`][] is called on each argument and the resulting string
|
2016-02-14 18:01:45 +01:00
|
|
|
values are concatenated. See [`util.format()`][] for more information.
|
2015-11-04 16:51:43 +01:00
|
|
|
|
|
|
|
### console.info([data][, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.100
|
|
|
|
-->
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
The `console.info()` function is an alias for [`console.log()`][].
|
2015-11-04 16:51:43 +01:00
|
|
|
|
|
|
|
### console.log([data][, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.100
|
|
|
|
-->
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-02-14 18:01:45 +01:00
|
|
|
Prints to `stdout` with newline. Multiple arguments can be passed, with the
|
|
|
|
first used as the primary message and all additional used as substitution
|
|
|
|
values similar to `printf(3)` (the arguments are all passed to
|
2015-12-26 18:13:23 +01:00
|
|
|
[`util.format()`][]).
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
var count = 5;
|
|
|
|
console.log('count: %d', count);
|
|
|
|
// Prints: count: 5, to stdout
|
|
|
|
console.log('count: ', count);
|
|
|
|
// Prints: count: 5, to stdout
|
|
|
|
```
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
If formatting elements (e.g. `%d`) are not found in the first string then
|
|
|
|
[`util.inspect()`][] is called on each argument and the resulting string
|
2016-02-14 18:01:45 +01:00
|
|
|
values are concatenated. See [`util.format()`][] for more information.
|
2015-11-04 16:51:43 +01:00
|
|
|
|
2015-10-29 20:22:12 +01:00
|
|
|
### console.time(label)
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.104
|
|
|
|
-->
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2015-10-07 20:01:36 +02:00
|
|
|
Starts a timer that can be used to compute the duration of an operation. Timers
|
2015-12-26 18:13:23 +01:00
|
|
|
are identified by a unique `label`. Use the same `label` when you call
|
2015-11-14 04:21:49 +01:00
|
|
|
[`console.timeEnd()`][] to stop the timer and output the elapsed time in
|
2016-05-30 14:27:36 +02:00
|
|
|
milliseconds to `stdout`. Timer durations are accurate to the sub-millisecond.
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2015-10-29 20:22:12 +01:00
|
|
|
### console.timeEnd(label)
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.104
|
|
|
|
-->
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2015-12-10 05:19:30 +01:00
|
|
|
Stops a timer that was previously started by calling [`console.time()`][] and
|
2016-05-30 14:27:36 +02:00
|
|
|
prints the result to `stdout`:
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
console.time('100-elements');
|
|
|
|
for (var i = 0; i < 100; i++) {
|
|
|
|
;
|
|
|
|
}
|
|
|
|
console.timeEnd('100-elements');
|
|
|
|
// prints 100-elements: 225.438ms
|
|
|
|
```
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2016-04-29 00:08:44 +02:00
|
|
|
*Note: As of Node.js v6.0.0, `console.timeEnd()` deletes the timer to avoid
|
|
|
|
leaking it. On older versions, the timer persisted. This allowed
|
|
|
|
`console.timeEnd()` to be called multiple times for the same label. This
|
|
|
|
functionality was unintended and is no longer supported.*
|
|
|
|
|
2015-04-10 11:30:32 +02:00
|
|
|
### console.trace(message[, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.104
|
|
|
|
-->
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2016-02-14 18:01:45 +01:00
|
|
|
Prints to `stderr` the string `'Trace :'`, followed by the [`util.format()`][]
|
2015-12-26 18:13:23 +01:00
|
|
|
formatted message and stack trace to the current position in the code.
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
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)
|
|
|
|
```
|
2011-04-19 01:52:53 +02:00
|
|
|
|
2015-11-04 16:51:43 +01:00
|
|
|
### console.warn([data][, ...])
|
2016-05-26 17:28:32 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.100
|
|
|
|
-->
|
2015-04-10 11:30:32 +02:00
|
|
|
|
2015-12-26 18:13:23 +01:00
|
|
|
The `console.warn()` function is an alias for [`console.error()`][].
|
2015-11-14 04:21:49 +01:00
|
|
|
|
2015-11-28 00:30:32 +01:00
|
|
|
[`console.error()`]: #console_console_error_data
|
|
|
|
[`console.log()`]: #console_console_log_data
|
2015-11-14 04:21:49 +01:00
|
|
|
[`console.time()`]: #console_console_time_label
|
2015-11-28 00:30:32 +01:00
|
|
|
[`console.timeEnd()`]: #console_console_timeend_label
|
2016-02-14 18:01:45 +01:00
|
|
|
[`process.stderr`]: process.html#process_process_stderr
|
|
|
|
[`process.stdout`]: process.html#process_process_stdout
|
2015-11-28 00:30:32 +01:00
|
|
|
[`util.format()`]: util.html#util_util_format_format
|
|
|
|
[`util.inspect()`]: util.html#util_util_inspect_object_options
|
2016-02-14 18:01:45 +01:00
|
|
|
[customizing `util.inspect()` colors]: util.html#util_customizing_util_inspect_colors
|
2016-04-12 20:27:29 +02:00
|
|
|
[web-api-assert]: https://developer.mozilla.org/en-US/docs/Web/API/console/assert
|