Console 类


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

  1. const Console = require('console').Console;
  2. const Console = console.Console;

new Console(stdout[, stderr])

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

  1. const output = fs.createWriteStream('./stdout.log');
  2. const errorOutput = fs.createWriteStream('./stderr.log');
  3. // 自定义的简单记录器
  4. const logger = new Console(output, errorOutput);
  5. // 像 console 那样使用
  6. var count = 5;
  7. logger.log('count: %d', count);
  8. // 在 stdout.log 中打印: count 5

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

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

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

添加:v0.1.100

使用换行符将信息打印到 stdout。可以传多个参数,第一个作为主要信息,其余的参数作为类似于 printf(3) 中的替换值(这些参数都会传给 util.format() 进行处理)。

  1. var count = 5;
  2. console.log('count: %d', count);
  3. // 在 stdout 中打印: count: 5
  4. console.log('count:', count);
  5. // 在 stdout 中打印: count: 5

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

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

添加:v0.1.100

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

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

添加:v0.1.100

使用换行符将信息打印到 stderr。可以传多个参数,第一个作为主要信息,其余的参数作为类似于 printf(3) 中的替换值(这些参数都会传给 util.format() 进行处理)。

  1. const code = 5;
  2. console.error('error #%d', code);
  3. // 在 stderr 中打印: error #5
  4. console.error('error', code);
  5. // 在 stderr 中打印: error 5

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

console.warn([data][, …args])

添加:v0.1.100

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

console.dir(obj[, options])

添加:v0.1.101

该函数在 obj 上使用 util.inspect() 并将结果字符串打印到 stdout 中。此函数会绕过任何定义在 obj 上的 inspect() 方法。可选 options 对象可以传一些用于格式化字符串的内容:

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

  • depth - 告诉 util.inspect() 函数在格式化对象时递归多少次。这对于检查大型复杂对象很有用。默认为 2。可以通过设置为 null 来实现无限递归。

  • colors - 如果为 true,那么输出结果将使用 ANSI 颜色代码。默认为 false。这里的颜色是可定制的,详见定制 util.inspect() 颜色

console.trace(message[, …args])

添加:v0.1.104

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

  1. console.trace('Show me');
  2. // Prints: (stack trace will vary based on where trace is called)
  3. // Trace: Show me
  4. // at repl:2:9
  5. // at REPLServer.defaultEval (repl.js:248:27)
  6. // at bound (domain.js:287:14)
  7. // at REPLServer.runBound [as eval] (domain.js:300:12)
  8. // at REPLServer.<anonymous> (repl.js:412:12)
  9. // at emitOne (events.js:82:20)
  10. // at REPLServer.emit (events.js:169:7)
  11. // at REPLServer.Interface._onLine (readline.js:210:10)
  12. // at REPLServer.Interface._line (readline.js:549:8)
  13. // at REPLServer.Interface._ttyWrite (readline.js:826:14)

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

添加:v0.1.101

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

  1. console.assert(true, 'does nothing');
  2. // OK
  3. console.assert(false, 'Whoops %s', 'didn\'t work');
  4. // AssertionError: Whoops didn't work

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

特别是在浏览器中调用假的断言后,console.assert() 会导致 message 被打印到控制台,但不会中断后续代码的执行。而在 Node.js 中,一个假的断言将导致抛出一个 AssertionError 错误。

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

在以下示例中,会创建一个简单的模块,该模块扩展并覆盖了 Node.js 中 console 的默认行为。

  1. 'use strict';
  2. // 用一种新的没有采用猴子补丁实现的 assert 来创建一个简单的 console 扩展。
  3. const myConsole = Object.setPrototypeOf({
  4. assert(assertion, message, ...args) {
  5. try {
  6. console.assert(assertion, message, ...args);
  7. } catch (err) {
  8. console.error(err.stack);
  9. }
  10. }
  11. }, console);
  12. module.exports = myConsole;

然后可以用于直接替换内置的控制台:

  1. const console = require('./myConsole');
  2. console.assert(false, 'this message will print, but no error thrown');
  3. console.log('this will also print');

console.time(label)

添加:v0.1.104

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

console.timeEnd(label)

添加:v0.1.104

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

  1. console.time('100-elements');
  2. for (var i = 0; i < 100; i++) {
  3. ;
  4. }
  5. console.timeEnd('100-elements');
  6. // 打印 100-elements: 225.438ms

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