当前位置: 首页 > news >正文

【Node】node的Console模块使用。

文章目录

  • 简言
  • Console
    • Class: Console 控制台类
      • new Console(stdout[, stderr][, ignoreErrors]) 创建一个新的 Console实例
      • new Console(options)
      • console.assert(value[, ...message]) 打印断言信息
      • console.clear() 清空TTY
      • console.count([label]) 计数
      • console.countReset([label]) 计数重置
      • console.debug(data[, ...args]) 调试打印
      • console.dir(obj[, options]) dir打印
      • console.dirxml(...data) dirxml打印
      • console.error([data][, ...args]) 错误信息打印
      • console.group([...label]) 增加缩进
      • console.groupCollapsed()
      • console.groupEnd() 减少缩进
      • console.info([data][, ...args]) 信息打印
      • console.log([data][, ...args]) 信息打印
      • console.table(tabularData[, properties]) 表格格式打印信息
      • console.time([label]) 开始计时
      • console.timeEnd([label]) 打印计时持续时间,并结束计时
      • console.timeLog([label][, ...data]) 当前持续时间,打印data数据
      • console.trace([message][, ...args])
      • console.warn([data][, ...args]) 警告信息打印
    • Inspector only methods --inspect 调试模式专用方法
      • console.profile([label])
      • console.profileEnd([label])
      • console.timeStamp([label])
  • 结语

简言

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

Console

node:console 模块提供了一个简单的调试控制台,类似于网络浏览器提供的 JavaScript 控制台机制。
该模块输出两个特定组件:

  • 一个控制台类,包含 console.log()、console.error() 和 console.warn()等方法,可用于写入任何 Node.js 数据流。
  • 全局控制台实例,配置为写入 process.stdout 和 process.stderr。全局控制台无需调用 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:3const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr 

使用控制台类的示例:

import { Console } from "node:console";
import { createWriteStream } from "node:fs";
import { join } from "node:path";
import { URL, fileURLToPath } from "node:url";
const __dirname = fileURLToPath(new URL("../../", import.meta.url));
const ouput = createWriteStream(join(__dirname, "src/console/stdout.log"));const errOutput = createWriteStream(join(__dirname, "src/console/stderr.log"));const logger = new Console({ stdout: ouput, stderr: errOutput });const count = 5;
logger.log("count : %d", count);logger.log("hello world");
// Prints: hello world, to out
logger.log("hello %s", "world");
// Prints: hello world, to out
logger.error(new Error("Whoops, something bad happened"));
// Prints: [Error: Whoops, something bad happened], to errconst name = "Will Robinson";
logger.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err

Class: Console 控制台类

Console 类可用于创建具有可配置输出流的简单日志记录器,并可使用 require(‘node:console’).Console 或 console.Console(或它们的重组对应类)访问:

const { Console } = require('node:console'); 
// or
const { Console } = console; 

new Console(stdout[, stderr][, ignoreErrors]) 创建一个新的 Console实例

new Console(options)

参数:

  • options 配置对象
    • stdout —— 日志信息输出流
    • stderr —— 用于警告或错误输出
    • ignoreErrors —— 写入底层流时忽略错误。默认值:true。
    • colorMode —— 设置此控制台实例的颜色支持。设置为 true 可在检查数值时着色。设为 false 则在检查数值时禁用着色。设置为 "auto "后,颜色支持取决于 isTTY 属性的值和相应流上 getColorDepth() 返回的值。如果同时设置了 inspectOptions.colors,则无法使用此选项。默认值:“auto”。
    • inspectOptions —— 指定传递给 util.inspect() 的选项。
    • groupIndentation —— 设置组缩进。默认值:2。

创建一个新的 Console,其中包含一个或两个可写流实例。stdout 是一个可写流,用于打印日志或信息输出。stderr 用于警告或错误输出。如果没有提供 stderr,则使用 stdout 代替 stderr。

import { Console } from "node:console";
import { createWriteStream } from "node:fs";
import { join } from "node:path";
import { URL, fileURLToPath } from "node:url";
const __dirname = fileURLToPath(new URL("../../", import.meta.url));
const ouput = createWriteStream(join(__dirname, "src/console/stdout.log"));const errOutput = createWriteStream(join(__dirname, "src/console/stderr.log"));const logger = new Console({ stdout: ouput, stderr: errOutput });const count = 5;
logger.log("count : %d", count);logger.log("hello world");
// Prints: hello world, to out
logger.log("hello %s", "world");
// Prints: hello world, to out
logger.error(new Error("Whoops, something bad happened"));
// Prints: [Error: Whoops, something bad happened], to errconst name = "Will Robinson";
logger.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err

全局控制台是一个特殊的控制台,其输出会发送到 process.stdout 和 process.stderr。它相当于调用:

const global = new Console({ stdout: process.stdout, stderr: process.stderr });
global.log("12323");

console.assert(value[, …message]) 打印断言信息

console.assert() 会在值有误或省略时写入一条信息。它只会写入一条信息,不会影响执行。输出总是以 "断言失败 "开头。如果提供了信息,则使用 util.format() 格式化信息。

如果值是真实的,则什么也不会发生。

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

console.clear() 清空TTY

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

TTY —— TTY是由虚拟控制台,串口以及伪终端设备组成的终端设备。

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

console.count([label]) 计数

参数:

  • label —— 计数器的显示标签。默认值:“default”。

维护一个特定于标签的内部计数器,并将调用给定标签的 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]) 计数重置

重置标签专用的内部计数器。

console.count("abc");
console.countReset("abc");
console.count("abc");

console.debug(data[, …args]) 调试打印

console.debug() 函数是 console.log() 的别名。
在调试模式下这个语句相当于在此处打了一下断点。

console.dir(obj[, options]) dir打印

参数:

  • obj :
  • oprions : 配置对象
    • showHidden —— 如果为 “true”,则也将显示对象的非可数和符号属性。默认值:false。
    • depth —— 告诉 util.inspect() 在格式化对象时要递归多少次。这对于检查大型复杂对象非常有用。要让它无限制地递归,请传递 null。默认值:2。
    • colors —— 如果为 “true”,则输出将采用 ANSI 颜色代码样式。颜色可自定义;请参阅自定义 util.inspect() 颜色。默认值:false。

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

console.dirxml(…data) dirxml打印

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

console.dir(`[1,2,3]`);
console.log(`[1,2,3]`);
console.dirxml(`[1,2,3]`);

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 

console.group([…label]) 增加缩进

根据 groupIndentation 长度,增加后续行的缩进空格。
如果提供了一个或多个标签,则先打印这些标签,而不增加缩进。

console.groupCollapsed()

console.group() 的别名。

console.groupEnd() 减少缩进

根据 groupIndentation 长度,以空格减少后续行的缩进。

console.log(1);
console.group();
console.log(2);
console.groupEnd();
console.log(3);

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 —— 数据
  • properties —— 用于构建表格的其他属性。
    尝试用 tabularData 的属性列(或使用属性)和 tabularData 的行构建一个表格并记录。如果无法解析为 tabular,则退回到只记录参数。
// These can't be parsed as tabular data
console.table(Symbol());
// Symbol()console.table(undefined);
// undefinedconsole.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.table([{ a: 1, b: "Y" },{ a: "Z", b: 2 },],["a", "b", "c"]
);

console.time([label]) 开始计时

启动计时器,用于计算操作的持续时间。定时器由一个唯一的标签标识(label)。调用 console.timeEnd() 停止计时器并以合适的时间单位向 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]) 当前持续时间,打印data数据

对于之前通过调用 console.time() 启动的计时器,会将经过的时间和其他数据参数打印到 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])

向 stderr 打印字符串 “Trace:”,然后是 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)

console.warn([data][, …args]) 警告信息打印

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

Inspector only methods --inspect 调试模式专用方法

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 剖析会话已启动,则停止该会话,并将报告打印到检查器的 Profiles 面板。有关示例,请参阅 console.profile()。
如果调用此方法时没有标签,则会停止最近启动的配置文件。

console.timeStamp([label])

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

结语

结束了。

相关文章:

  • 【面试题-012】什么是Spring 它有哪些优势
  • 回溯算法题模板与实战详解
  • 通用代码生成器应用场景六,为完善的应用系统收集需求
  • python替换“${}“占位符为变量,实现读取配置文件
  • MiniQMT国债逆回购策略Python代码全解析
  • CSAPP Lab05——Performance Lab完成思路
  • GPT-4o:重塑人机交互的未来
  • 上位机图像处理和嵌入式模块部署(f407 mcu中fatfs中间件使用)
  • npm安装依赖报错npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfo
  • static修饰变量和函数
  • Ubuntu中安装和配置SSH的完全指南
  • LeetCode 算法:三数之和c++
  • Java中的泛型类型参数详解
  • 代碼隨想录 day22|day23
  • 7EPhone云手机各功能详解
  • 【node学习】协程
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 2017年终总结、随想
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js作用域和this的理解
  • LeetCode算法系列_0891_子序列宽度之和
  • PHP 小技巧
  • Promise初体验
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React组件设计模式(一)
  • SAP云平台里Global Account和Sub Account的关系
  • vue 配置sass、scss全局变量
  • vue总结
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云购买磁盘后挂载
  • 爱情 北京女病人
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 悄悄地说一个bug
  • 为什么要用IPython/Jupyter?
  • 一个项目push到多个远程Git仓库
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 译米田引理
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 再次简单明了总结flex布局,一看就懂...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​虚拟化系列介绍(十)
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Apache SeaTunnel 究竟是什么?
  • #微信小程序(布局、渲染层基础知识)
  • ${ }的特别功能
  • (floyd+补集) poj 3275