Node.js v8.4.0 文档


console (控制台)#

查看英文版 / 参与翻译

稳定性: 2 - 稳定的

console 模块提供了一个简单的调试控制台,类似于 Web 浏览器提供的 JavaScript 控制台。

该模块导出了两个特定的组件:

  • 一个 Console 类,包含 console.log()console.error()console.warn() 等方法,可以被用于写入到任何 Node.js 流。
  • 一个全局的 console 实例,可被用于写入到 process.stdoutprocess.stderr。 全局的 console 使用时无需调用 require('console')

注意:全局的 console 对象的方法既不总是同步的(如浏览器中类似的 API),也不总是异步的(如其他 Node.js 流)。 详见 进程 I/O

例子,使用全局的 console

console.log('你好世界');
// 打印: '你好世界'到 stdout。
console.log('你好%s', '世界');
// 打印: '你好世界'到 stdout。
console.error(new Error('错误信息'));
// 打印: [Error: 错误信息]到 stderr。

const name = '描述';
console.warn(`警告${name}`);
// 打印: '警告描述'到 stderr。

例子,使用 Console 类:

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

myConsole.log('你好世界');
// 打印: '你好世界'到 out。
myConsole.log('你好%s', '世界');
// 打印: '你好世界'到 out。
myConsole.error(new Error('错误信息'));
// 打印: [Error: 错误信息]到 err。

const name = '描述';
myConsole.warn(`警告${name}`);
// 打印: '警告描述'到 err。

Console 类#

查看英文版 / 参与翻译

Console 类可用于创建一个具有可配置的输出流的简单记录器,可以通过 require('console').Consoleconsole.Console 使用:

const { Console } = require('console');
const { Console } = console;

new Console(stdout[, stderr])#

查看英文版 / 参与翻译

  • stdout <Writable>
  • stderr <Writable>

通过传入一个或两个可写流实例,创建一个新的 Console 对象。 stdout 是一个可写流,用于打印日志或输出信息。 stderr 用于输出警告或错误。 如果没有传入 stderr ,则警告或错误输出会被发送到 stdout

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// 自定义的简单记录器
const logger = new Console(output, errorOutput);
// 像 console 一样使用
const count = 5;
logger.log('count: %d', count);
// stdout.log 中打印: count 5

全局的 console 是一个特殊的 Console 实例,它的输出会发送到 process.stdoutprocess.stderr。 相当于调用:

new Console(process.stdout, process.stderr);

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

查看英文版 / 参与翻译

  • value <any>
  • message <any>
  • ...args <any>

一个简单的断言测试,验证 value 是否为真。 如果不为真,则抛出 AssertionError。 如果提供了 message,则使用 util.format() 格式化并作为错误信息使用。

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

注意:Node.js 中的 console.assert() 方法与在浏览器中console.assert() 方法的实现是不一样的。

具体地说,在浏览器中,用非真的断言调用 console.assert() 会导致 message 被打印到控制台但不会中断后续代码的执行。 而在 Node.js 中,非真的断言会导致抛出 AssertionError

可以通过扩展 Node.js 的 console 并重写 console.assert() 方法来实现与浏览器中类似的功能。

例子,创建一个简单的模块,并扩展与重写了 Node.js 中 console 的默认行为。

'use strict';

// 用一个新的不带补丁的 assert 实现来创建一个简单的 console 扩展。
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;

然后可以用来直接替换内置的 console:

const console = require('./myConsole');
console.assert(false, '会打印这个消息,但不会抛出错误');
console.log('这个也会打印');

console.clear()#

查看英文版 / 参与翻译

When stdout is a TTY, calling console.clear() will attempt to clear the TTY. When stdout is not a TTY, this method does nothing.

Note: The specific operation of console.clear() can vary across operating systems and terminal types. For most Linux operating systems, console.clear() operates similarly to the clear shell command. On Windows, console.clear() will clear only the output in the current terminal viewport for the Node.js binary.

console.count([label])#

查看英文版 / 参与翻译

  • label <string> The display label for the counter. Defaults to 'default'.

Maintains an internal counter specific to label and outputs to stdout the number of times console.count() has been called with the given label.

> 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 = 'default'])#

查看英文版 / 参与翻译

  • label <string> The display label for the counter. Defaults to 'default'.

Resets the internal counter specific to label.

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

console.dir(obj[, options])#

查看英文版 / 参与翻译

obj 上使用 util.inspect() 并打印结果字符串到 stdout。 该函数会绕过任何定义在 obj 上的自定义的 inspect() 函数。 可选的 options 对象可以传入用于改变被格式化的字符串:

  • showHidden - 如果为 true,则该对象中的不可枚举属性和 symbol 属性也会显示。默认为 false

  • depth - 告诉 util.inspect() 函数当格式化对象时要递归多少次。 这对于检查较大的复杂对象很有用。 默认为 2。 设为 null 可无限递归。

  • colors - 如果为 true,则输出会带有 ANSI 颜色代码。 默认为 false。 颜色是可定制的,详见定制 util.inspect() 颜色

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

查看英文版 / 参与翻译

  • data <any>
  • ...args <any>

打印到 stderr,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。

const code = 5;
console.error('error #%d', code);
// 打印: error #5 到 stderr
console.error('error', code);
// 打印: error 5 到 stderr

如果在第一个字符串中没有找到格式化元素(如 %d),则在每个参数上调用 util.inspect() 并将结果字符串值拼在一起。 详见 util.format()

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

查看英文版 / 参与翻译

  • data <any>
  • ...args <any>

console.info() 函数是 console.log() 的一个别名。

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

查看英文版 / 参与翻译

  • data <any>
  • ...args <any>

打印到 stdout,并带上换行符。 可以传入多个参数,第一个参数作为主要信息,其他参数作为类似于 printf(3) 中的代替值(参数都会传给 util.format())。

const count = 5;
console.log('count: %d', count);
// 打印: count: 5 到 stdout
console.log('count:', count);
// 打印: count: 5 到 stdout

详见 util.format()

console.time(label)#

查看英文版 / 参与翻译

启动一个定时器,用以计算一个操作的持续时间。 定时器由一个唯一的 label 标识。 当调用 console.timeEnd() 时,可以使用相同的 label 来停止定时器,并以毫秒为单位将持续时间输出到 stdout。 定时器持续时间精确到亚毫秒。

console.timeEnd(label)#

查看英文版 / 参与翻译

停止之前通过调用 console.time() 启动的定时器,并打印结果到 stdout

console.time('100-elements');
for (let i = 0; i < 100; i++) {}
console.timeEnd('100-elements');
// 打印 100-elements: 225.438ms

注意:从 Node.js v6.0.0 开始,console.timeEnd() 删除了计时器以避免泄漏。 在旧版本上,计时器依然保留。 它允许 console.timeEnd() 可以多次调用同一标签。 此功能是非计划中的,不再被支持。

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

查看英文版 / 参与翻译

  • message <any>
  • ...args <any>

打印字符串 'Trace :'stderr ,并通过 util.format() 格式化消息与堆栈跟踪在代码中的当前位置。

console.trace('Show me');
// 打印: (堆栈跟踪会根据被调用的跟踪的位置而变化)
//  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])#

查看英文版 / 参与翻译

  • data <any>
  • ...args <any>

console.warn() 函数是 console.error() 的一个别名。