Node.js v20.7.0 文档


目录

控制台#

稳定性: 2 - 稳定

源代码: lib/console.js

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

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

  • Console 类,具有 console.log()console.error()、和 console.warn() 等方法,可用于写入任何 Node.js 流。
  • 全局的 console 实例,配置为写入 process.stdoutprocess.stderr。 全局的 console 无需调用 require('node:console') 就可以使用。

警告_: 全局控制台对象的方法既不像它们类似的浏览器 API 那样始终同步,也不像所有其他 Node.js 流那样始终异步。 有关详细信息,请参阅 关于进程 I/O 的注意事项

使用全局的 console 的示例:

console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to 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!`);
// Prints: Danger Will Robinson! Danger!, to stderr 

使用 Console 类的示例:

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

myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err

const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err 

类:Console#

Console 类可用于创建具有可配置输出流的简单日志器,并可使用 require('node:console').Consoleconsole.Console(或它们的解构对应物)访问:

const { Console } = require('node: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 可在检查值时进行着色。 设置为 false 会在检查值时禁用着色。 设置为 'auto' 使颜色支持取决于 isTTY 属性的值和 getColorDepth() 在相应流上返回的值。 如果同时设置了 inspectOptions.colors,则无法使用此选项。 默认值: 'auto'
    • inspectOptions <Object> 指定传给 util.inspect() 的选项。
    • groupIndentation <number> 设置组缩进。 默认值: 2

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

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// Custom simple logger
const logger = new Console({ stdout: output, stderr: errorOutput });
// use it like console
const count = 5;
logger.log('count: %d', count);
// In 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 之外的所有参数都用作错误消息。

如果 valuefalsy 或省略,则 console.assert() 写入消息。 它只写入一条消息,不会影响执行。 输出始终以 "Assertion failed" 开头。 如果提供,则使用 util.format() 格式化 message

如果 valuetruthy,则什么也不会发生。

console.assert(true, 'does nothing');

console.assert(false, 'Whoops %s work', 'didn\'t');
// Assertion failed: Whoops didn't work

console.assert();
// Assertion failed 

console.clear()#

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

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

console.count([label])#

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

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

> 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);
// Prints: error #5, to stderr
console.error('error', code);
// Prints: error 5, to stderr 

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

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

将后续行的缩进增加 groupIndentation 长度的空格。

如果提供了一个或多个 label,则首先打印这些 label 而无需额外缩进。

console.groupCollapsed()#

console.group() 的别名。

console.groupEnd()#

将后续行的缩进减少 groupIndentation 长度的空格。

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

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

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

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

const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout 

有关详细信息,请参阅 util.format()

console.table(tabularData[, properties])#

  • tabularData <any>
  • properties <string[]> 用于构造表格的替代属性。

尝试用 tabularData 的属性的列(或使用 properties)和 tabularData 的行构建表格并记录它。 如果不能将参数解析为表格,则退回到仅记录参数。

// These can't be parsed as tabular data
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 标识。 调用 console.timeEnd() 时使用相同的 label 停止计时器并将经过的时间以合适的时间单位输出到 stdout。 例如,如果经过时间为 3869ms,则 console.timeEnd() 显示 "3.869s"。

console.timeEnd([label])#

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

console.time('bunch-of-stuff');
// Do a bunch of stuff.
console.timeEnd('bunch-of-stuff');
// Prints: bunch-of-stuff: 225.438ms 

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

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

console.time('process');
const value = expensiveProcess1(); // Returns 42
console.timeLog('process', value);
// Prints "process: 365.227ms 42".
doExpensiveProcess2(value);
console.timeEnd('process'); 

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

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

console.trace('Show me');
// Prints: (stack trace will vary based on where trace is called)
//  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])#

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

仅限检查器的方法#

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

console.profile([label])#

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

console.profile('MyLabel');
// Some code
console.profileEnd('MyLabel');
// Adds the profile 'MyLabel' to the Profiles panel of the inspector. 

console.profileEnd([label])#

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

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

console.timeStamp([label])#

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