Node.js v12.9.0 文档


console(控制台)#

中英对照提交修改

稳定性: 2 - 稳定

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

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

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

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

使用全局 console 的示例:

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

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('错误信息'));
// 打印到 err: [Error: 错误信息]

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

Console 类#

中英对照提交修改

Console 类可用于创建具有可配置的输出流的简单记录器,可以使用 require('console').Consoleconsole.Console(或其结构化对应物)访问:

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

new Console(stdout[, stderr][, ignoreerrors])#

new Console(options)#

中英对照提交修改

  • options <Object>

    • stdout <stream.Writable>
    • stderr <stream.Writable>
    • ignoreErrors <boolean> 在写入底层流时忽略错误。默认值: true
    • colorMode <boolean> | <string>Console 实例设置颜色支持。 设置为 true 会在检查值时启用着色,设置为 'auto' 将使颜色支持取决 isTTY 属性的值和 getColorDepth() 在相应流上返回的值。 如果设置了 inspectOptions.colors,则不能使用此选项。 默认值: 'auto'
    • inspectOptions <Object> 指定传给 util.inspect() 的选项。

创建具有一个或两个可写流实例的新 Consolestdout 是一个可写流,用于打印日志或信息输出。 stderr 用于警告或错误输出。 如果未提供 stderr,则 stdout 用于 stderr

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// 自定义的简单记录器。
const logger = new Console({ stdout: output, stderr: errorOutput });
// 像控制台一样使用它。
const count = 5;
logger.log('count: %d', count);
// 在 stdout.log 中: count 5

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

new Console({ stdout: process.stdout, stderr: process.stderr });

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

中英对照提交修改

  • value <any> 测试是否为真的值。
  • ...message <any>value 之外的所有参数都用作错误消息。

一个简单的断言测试,用于验证 value 是否为真。 如果不是,则记录 Assertion failed。 如果提供 message,则通过传入所有消息参数来使用 util.format() 格式化错误消息。 输出用作错误消息。

console.assert(true, '什么都不做');
// OK
console.assert(false, '%s 工作', '无法');
// Assertion failed: 无法工作

使用非真的断言调用 console.assert() 只会导致打印 message 到控制台而不会中断后续代码的执行。

console.clear()#

中英对照提交修改

stdout 是 TTY 时,调用 console.clear() 将尝试清除 TTY。 当 stdout 不是 TTY 时,此方法不执行任何操作。

console.clear() 的具体操作可能因操作系统和终端类型而异。 对于大多数 Linux 操作系统, console.clear() 的操作与 clear 的 shell 命令类似。 在 Windows 上, console.clear() 将仅清除当前终端视图中 Node.js 二进制文件的输出。

console.count([label])#

中英对照提交修改

  • label <string> 计数器的显示标签。默认值: 'default'

维护一个特定于 label 的内部计数器,并将用给定 label 调用 console.count() 的次数输出到 stdout

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

中英对照提交修改

  • label <string> 计数器的显示标签。 默认值: 'default'

重置特定于 label 的内部计数器。

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

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

中英对照提交修改

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

console.dir(obj[, options])#

中英对照提交修改

  • obj <any>
  • options <Object>

    • showHidden <boolean> 如果为 true,则也会显示对象的不可枚举属性和符号属性。默认值: false
    • depth <number> 告诉 util.inspect() 格式化对象时要递归多少次。这对于检查大型复杂对象很有用。要使其无限递归,可传入 null默认值: 2
    • colors <boolean> 如果为 true,则输出将使用 ANSI 颜色代码进行样式设置。颜色可定制,请参阅自定义 util.inspect() 颜色默认值: false

obj 上使用 util.inspect() 并将结果字符串打印到 stdout。 此函数绕过 obj 上定义的任何自定义 inspect() 函数。

console.dirxml(...data)#

中英对照提交修改

此方法调用 console.log() 将接收到的参数传递给它。 此方法不会生成任何 XML 格式。

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

中英对照提交修改

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

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

如果在第一个字符串中找不到格式化元素(例如 %d),则会在每个参数上调用 util.inspect(),并且连接结果字符串值。 有关更多信息,请参见 util.format()

console.group([...label])#

中英对照提交修改

将后续行的缩进增加两个空格。

如果提供了一个或多个 label,则首先打印它们,而不另外添加缩进。

console.groupCollapsed()#

中英对照提交修改

console.group() 的别名。

console.groupEnd()#

中英对照提交修改

减少后续行的缩进两个空格。

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

中英对照提交修改

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

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

中英对照提交修改

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

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

有关更多信息,请参见 util.format()

console.table(tabularData[, properties])#

中英对照提交修改

尝试使用 tabularData(或使用 properties)的属性列和 tabularData 的行来构造一个表并记录它。 如果无法将其解析为表格,则回退到仅记录参数。

// 这些不能解析为表格数据。
console.table(Symbol());
// Symbol()

console.table(undefined);
// undefined

console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]);
// ┌─────────┬─────┬─────┐
// │ (index) │  a  │  b  │
// ├─────────┼─────┼─────┤
// │    0    │  1  │ 'Y' │
// │    1    │ 'Z' │  2  │
// └─────────┴─────┴─────┘

console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }], ['a']);
// ┌─────────┬─────┐
// │ (index) │  a  │
// ├─────────┼─────┤
// │    0    │  1  │
// │    1    │ 'Z' │
// └─────────┴─────┘

console.time([label])#

中英对照提交修改

  • label <string> 默认值: 'default'

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

console.timeEnd([label])#

中英对照提交修改

  • label <string> 默认值: 'default'

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

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

console.timeLog([label][, ...data])#

中英对照提交修改

对于先前通过调用 console.time() 启动的计时器,将经过时间和其他 data 参数打印到 stdout

console.time('process');
const value = expensiveProcess1(); // 返回 42
console.timeLog('process', value);
// 打印 "process: 365.227ms 42"。
doExpensiveProcess2(value);
console.timeEnd('process');

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

中英对照提交修改

打印字符串 'Trace: 'stderr,然后将 util.format() 格式化的消息和堆栈跟踪打印到代码中的当前位置。

console.trace('展示');
// 打印: (堆栈跟踪将根据调用跟踪的位置而有所不同)
//  Trace: 展示
//    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])#

中英对照提交修改

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

仅用于调试的方法#

中英对照提交修改

V8 引擎在通用 API 中公开了以下方法,但除非与检查器--inspect 标志)一起使用,否则不显示任何内容。

console.markTimeline([label])#

中英对照提交修改

  • label <string> 默认值: 'default'

除非在检查器中使用,否则此方法不显示任何内容。 console.markTimeline() 方法是 console.timeStamp() 的废弃形式。

console.profile([label])#

中英对照提交修改

除非在检查器中使用,否则此方法不显示任何内容。 console.profile() 方法启动带有可选标签的 JavaScript CPU 配置文件,直到调用 console.profileEnd()。 然后将配置文件添加到检查器的 Profiles 面板中。

console.profile('MyLabel');
// 一些代码
console.profileEnd('MyLabel');
// 将配置文件 'MyLabel' 添加到检查器的 Profiles 面板中。

console.profileEnd([label])#

中英对照提交修改

除非在检查器中使用,否则此方法不显示任何内容。 如果已启动,则停止当前的 JavaScript CPU 概要分析会话,并将报告打印到检查器的 Profiles 面板。 有关示例,请参阅 console.profile()

如果在没有标签的情况下调用此方法,则会停止最近启动的配置文件。

console.timeStamp([label])#

中英对照提交修改

除非在检查器中使用,否则此方法不显示任何内容。 console.timeStamp() 方法将标签为 'label' 的事件添加到检查器的 Timeline 面板中。

console.timeline([label])#

中英对照提交修改

  • label <string> 默认值: 'default'

除非在检查器中使用,否则此方法不显示任何内容。 console.timeline() 方法是 console.time() 的弃用形式。

console.timelineEnd([label])#

中英对照提交修改

  • label <string> 默认值: 'default'

除非在检查器中使用,否则此方法不显示任何内容。 console.timelineEnd() 方法是 console.timeEnd() 的弃用形式。