当前位置: 首页 > 文档资料 > Node.js API 文档 >

Console (控制台)

优质
小牛编辑
137浏览
2023-12-01

稳定性: 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 类

版本历史

版本变更
v8.0.0Errors that occur while writing to the underlying streams will now be ignored.

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])

新增于: v0.1.101

  • 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.dir(obj[, options])

新增于: v0.1.101

  • obj <any>
  • options <Object>
    • showHidden <boolean>
    • depth <number>
    • colors <boolean>

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])

新增于: v0.1.100

  • 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])

新增于: v0.1.100

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

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

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

新增于: v0.1.100

  • 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

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

console.time(label)

新增于: v0.1.104

  • label <string>

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

console.timeEnd(label)

版本历史

版本变更
v6.0.0This method no longer supports multiple calls that don’t map to individual console.time() calls; see below for details.
v0.1.104新增于: v0.1.104
  • label <string>

停止之前通过调用 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])

新增于: v0.1.104

  • 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])

新增于: v0.1.100

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

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