控制台
源代码: lib/console.js
node:console
模块提供了一个简单的调试控制台,类似于 web 浏览器提供的 JavaScript 控制台机制。
该模块导出两个特定组件:
- 一个
Console
类,包含console.log()
、console.error()
和console.warn()
等方法,可用于写入任何 Node.js 流。 - 一个全局
console
实例,配置为写入process.stdout
和process.stderr
。无需调用require('node:console')
即可使用全局console
。
警告: 全局 console 对象的方法既不像其类似的浏览器 API 那样始终同步,也不像所有其他 Node.js 流那样始终异步。希望依赖于 console 函数的同步/异步行为的程序应首先弄清楚控制台后备流的性质。这是因为流依赖于底层平台和当前进程的标准流配置。有关更多信息,请参阅关于进程 I/O 的说明。
使用全局 console
的示例:
console.log('hello world')
// 输出:hello world,到 stdout
console.log('hello %s', 'world')
// 输出:hello world,到 stdout
console.error(new Error('Whoops, something bad happened'))
// 将错误消息和堆栈跟踪打印到 stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson'
console.warn(`Danger ${name}! Danger!`)
// 输出:Danger Will Robinson! Danger!,到 stderr
使用 Console
类的示例:
const out = getStreamSomehow()
const err = getStreamSomehow()
const myConsole = new console.Console(out, err)
myConsole.log('hello world')
// 输出:hello world,到 out
myConsole.log('hello %s', 'world')
// 输出:hello world,到 out
myConsole.error(new Error('Whoops, something bad happened'))
// 输出:[Error: Whoops, something bad happened],到 err
const name = 'Will Robinson'
myConsole.warn(`Danger ${name}! Danger!`)
// 输出:Danger Will Robinson! Danger!,到 err
类: Console
[历史]
版本 | 变更 |
---|---|
v8.0.0 | 默认情况下,写入底层流时发生的错误将被忽略。 |
Console
类可用于创建一个具有可配置输出流的简单日志记录器,可以使用 require('node:console').Console
或 console.Console
(或其解构的对应项) 来访问:
import { Console } from 'node:console'
const { Console } = require('node:console')
const { Console } = console
new Console(stdout[, stderr][, ignoreErrors])
new Console(options)
[历史]
版本 | 变更 |
---|---|
v14.2.0, v12.17.0 | 引入了 groupIndentation 选项。 |
v11.7.0 | 引入了 inspectOptions 选项。 |
v10.0.0 | Console 构造函数现在支持 options 参数,并引入了 colorMode 选项。 |
v8.0.0 | 引入了 ignoreErrors 选项。 |
options
<对象>stdout
<stream.Writable>stderr
<stream.Writable>ignoreErrors
<布尔值> 写入底层流时忽略错误。默认值:true
。colorMode
<布尔值> | <字符串> 为此Console
实例设置颜色支持。设置为true
将启用颜色检查值。设置为false
将禁用颜色检查值。设置为'auto'
使颜色支持取决于isTTY
属性的值和各自流上getColorDepth()
返回的值。如果也设置了inspectOptions.colors
,则无法使用此选项。默认值:'auto'
。inspectOptions
<对象> 指定传递给util.inspect()
的选项。groupIndentation
<数字> 设置分组缩进。默认值:2
。
创建一个具有一个或两个可写流实例的新 Console
。stdout
是一个用于打印日志或信息输出的可写流。stderr
用于警告或错误输出。如果未提供 stderr
,则 stdout
用于 stderr
。
import { createWriteStream } from 'node:fs'
import { Console } from 'node:console'
// 或者
// const { Console } = console;
const output = createWriteStream('./stdout.log')
const errorOutput = createWriteStream('./stderr.log')
// 自定义简单日志记录器
const logger = new Console({ stdout: output, stderr: errorOutput })
// 像控制台一样使用它
const count = 5
logger.log('count: %d', count)
// 在 stdout.log 中:count 5
const fs = require('node:fs')
const { Console } = require('node:console')
// 或者
// const { Console } = console;
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.stdout
和 process.stderr
。它等效于调用:
new Console({ stdout: process.stdout, stderr: process.stderr })
console.assert(value[, ...message])
[历史]
版本 | 变更 |
---|---|
v10.0.0 | 实现现在符合规范,不再抛出异常。 |
v0.1.101 | 新增于:v0.1.101 |
console.assert()
如果 value
为 假值 或被省略,则写入一条消息。它只写入消息,否则不影响执行。输出总是以 "Assertion failed"
开头。如果提供,则使用 util.format()
格式化 message
。
如果 value
为 真值,则不会发生任何事情。
console.assert(true, '不会执行任何操作')
console.assert(false, '糟糕 %s 不起作用', '没有')
// Assertion failed: 糟糕 没有 不起作用
console.assert()
// Assertion failed
console.clear()
新增于:v8.3.0
当 stdout
是一个 TTY 时,调用 console.clear()
将尝试清除 TTY。当 stdout
不是 TTY 时,此方法不执行任何操作。
console.clear()
的具体操作可能因操作系统和终端类型而异。对于大多数 Linux 操作系统,console.clear()
的操作类似于 clear
shell 命令。在 Windows 上,console.clear()
只会清除 Node.js 二进制文件当前终端视窗中的输出。
console.count([label])
新增于:v8.3.0
label
<string> 计数器的显示标签。默认值:'default'
。
维护一个特定于 label
的内部计数器,并将 console.count()
使用给定 label
调用的次数输出到 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])
新增于:v8.3.0
label
<string> 计数器的显示标签。默认值:'default'
。
重置特定于 label
的内部计数器。
> console.count('abc');
abc: 1
undefined
> console.countReset('abc');
undefined
> console.count('abc');
abc: 1
undefined
>
console.debug(data[, ...args])
[历史]
版本 | 变更 |
---|---|
v8.10.0 | console.debug 现在是 console.log 的别名。 |
v8.0.0 | 新增于:v8.0.0 |
console.debug()
函数是 console.log()
的别名。
console.dir(obj[, options])
新增于:v0.1.101
obj
<any>options
<Object>showHidden
<boolean> 如果为true
,则对象的不可枚举属性和符号属性也将显示。默认值:false
。depth
<number> 告诉util.inspect()
在格式化对象时递归多少次。这对于检查大型复杂对象很有用。要使其无限递归,请传递null
。默认值:2
。colors
<boolean> 如果为true
,则输出将使用 ANSI 颜色代码进行样式设置。颜色是可自定义的;请参见 自定义util.inspect()
颜色。默认值:false
。
使用 util.inspect()
处理 obj
并将结果字符串打印到 stdout
。此函数会绕过在 obj
上定义的任何自定义 inspect()
函数。
console.dirxml(...data)
[历史]
版本 | 变更 |
---|---|
v9.3.0 | console.dirxml 现在会调用 console.log 来处理其参数。 |
v8.0.0 | 新增于:v8.0.0 |
...data
<任意>
此方法调用 console.log()
并将接收到的参数传递给它。此方法不会生成任何 XML 格式。
console.error([data][, ...args])
新增于:v0.1.100
向 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.group([...label])
新增于:v8.5.0
...label
<any>
将后续行的缩进增加 groupIndentation
长度的空格。
如果提供了一个或多个 label
,则首先打印这些 label
,不进行额外的缩进。
console.groupCollapsed()
新增于:v8.5.0
console.group()
的别名。
console.groupEnd()
新增于:v8.5.0
将后续行的缩进减少 groupIndentation
长度的空格。
console.info([data][, ...args])
新增于:v0.1.100
console.info()
函数是 console.log()
的别名。
console.log([data][, ...args])
新增于:v0.1.100
向 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.table(tabularData[, properties])
新增于:v10.0.0
tabularData
<any>properties
<string[]> 用于构建表格的替代属性。
尝试使用 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])
新增于:v0.1.104
label
<string> 默认值:'default'
启动一个计时器,用于计算操作的持续时间。计时器由唯一的 label
标识。调用 console.timeEnd()
并使用相同的 label
来停止计时器,并将经过的时间以合适的单位输出到 stdout
。例如,如果经过的时间是 3869ms,console.timeEnd()
将显示 "3.869s"。
console.timeEnd([label])
[历史]
版本 | 变更 |
---|---|
v13.0.0 | 经过的时间将以合适的单位显示。 |
v6.0.0 | 此方法不再支持不映射到单个 console.time() 调用的多个调用;详情见下文。 |
v0.1.104 | 新增于:v0.1.104 |
label
<string> 默认值:'default'
停止之前通过调用 console.time()
启动的计时器,并将结果打印到 stdout
:
console.time('bunch-of-stuff')
// 执行大量操作。
console.timeEnd('bunch-of-stuff')
// 打印:bunch-of-stuff: 225.438ms
console.timeLog([label][, ...data])
新增于: v10.7.0
对于之前通过调用 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])
新增于: v0.1.104
将字符串 'Trace: '
、util.format()
格式化的消息和代码当前位置的堆栈跟踪打印到 stderr
。
console.trace('Show me')
// 打印: (堆栈跟踪会根据 trace 的调用位置而有所不同)
// 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
console.warn()
函数是 console.error()
的别名。
只限检查器的方法
以下方法由 V8 引擎在通用 API 中公开,但除非与 检查器 (--inspect
标志) 结合使用,否则不会显示任何内容。
console.profile([label])
新增于:v8.0.0
label
<字符串>
除非在检查器中使用,否则此方法不会显示任何内容。console.profile()
方法启动一个 JavaScript CPU 配置文件(可选标签),直到调用 console.profileEnd()
为止。然后将该配置文件添加到检查器的 Profile 面板。
console.profile('MyLabel')
// 部分代码
console.profileEnd('MyLabel')
// 将配置文件 'MyLabel' 添加到检查器的 Profiles 面板。
console.profileEnd([label])
新增于:v8.0.0
label
<string>
除非在调试器中使用,否则此方法不会显示任何内容。如果已启动当前 JavaScript CPU 分析会话,则停止该会话并将报告打印到调试器的Profiles面板。请参阅console.profile()
以了解示例。
如果调用此方法时未指定标签,则会停止最近启动的概要文件。
console.timeStamp([label])
新增于:v8.0.0
label
<string>
除非在调试器中使用,否则此方法不会显示任何内容。console.timeStamp()
方法会在调试器的Timeline面板中添加一个带有标签'label'
的事件。