- assert 断言
- async_hooks 异步钩子
- async_hooks/context 异步上下文
- buffer 缓冲区
- C++插件
- C/C++插件(使用 Node-API)
- C++嵌入器
- child_process 子进程
- cluster 集群
- CLI 命令行
- console 控制台
- Corepack 核心包
- crypto 加密
- crypto/webcrypto 网络加密
- debugger 调试器
- deprecation 弃用
- dgram 数据报
- diagnostics_channel 诊断通道
- dns 域名服务器
- domain 域
- Error 错误
- events 事件触发器
- fs 文件系统
- global 全局变量
- http 超文本传输协议
- http2 超文本传输协议 2.0
- https 安全超文本传输协议
- inspector 检查器
- Intl 国际化
- module 模块
- module/cjs CommonJS 模块
- module/esm ECMAScript 模块
- module/package 包模块
- net 网络
- os 操作系统
- path 路径
- perf_hooks 性能钩子
- permission 权限
- process 进程
- punycode 域名代码
- querystring 查询字符串
- readline 逐行读取
- repl 交互式解释器
- report 诊断报告
- sea 单个可执行应用程序
- stream 流
- stream/web 网络流
- string_decoder 字符串解码器
- test 测试
- timers 定时器
- tls 安全传输层
- trace_events 跟踪事件
- tty 终端
- url 网址
- util 实用工具
- v8 引擎
- vm 虚拟机
- wasi 网络汇编系统接口
- worker_threads 工作线程
- zlib 压缩
Node.js v20.20.6 文档
- Node.js v20.20.6
- 目录
-
导航
- assert 断言
- async_hooks 异步钩子
- async_hooks/context 异步上下文
- buffer 缓冲区
- C++插件
- C/C++插件(使用 Node-API)
- C++嵌入器
- child_process 子进程
- cluster 集群
- CLI 命令行
- console 控制台
- Corepack 核心包
- crypto 加密
- crypto/webcrypto 网络加密
- debugger 调试器
- deprecation 弃用
- dgram 数据报
- diagnostics_channel 诊断通道
- dns 域名服务器
- domain 域
- Error 错误
- events 事件触发器
- fs 文件系统
- global 全局变量
- http 超文本传输协议
- http2 超文本传输协议 2.0
- https 安全超文本传输协议
- inspector 检查器
- Intl 国际化
- module 模块
- module/cjs CommonJS 模块
- module/esm ECMAScript 模块
- module/package 包模块
- net 网络
- os 操作系统
- path 路径
- perf_hooks 性能钩子
- permission 权限
- process 进程
- punycode 域名代码
- querystring 查询字符串
- readline 逐行读取
- repl 交互式解释器
- report 诊断报告
- sea 单个可执行应用程序
- stream 流
- stream/web 网络流
- string_decoder 字符串解码器
- test 测试
- timers 定时器
- tls 安全传输层
- trace_events 跟踪事件
- tty 终端
- url 网址
- util 实用工具
- v8 引擎
- vm 虚拟机
- wasi 网络汇编系统接口
- worker_threads 工作线程
- zlib 压缩
- 其他版本
跟踪事件#>
【Trace events】
源代码: lib/trace_events.js
node:trace_events 模块提供了一种机制,用于集中 V8、Node.js 核心和用户空间代码生成的跟踪信息。
【The node:trace_events module provides a mechanism to centralize tracing
information generated by V8, Node.js core, and userspace code.】
可以通过使用 --trace-event-categories 命令行标志或 node:trace_events 模块来启用跟踪。 --trace-event-categories 标志接受用逗号分隔的类别名称列表。
【Tracing can be enabled with the --trace-event-categories command-line flag
or by using the node:trace_events module. The --trace-event-categories flag
accepts a list of comma-separated category names.】
可用的类别是:
【The available categories are:】
node:一个空占位符。node.async_hooks:启用捕获详细的async_hooks跟踪数据。async_hooks事件具有唯一的asyncId和特殊的triggerIdtriggerAsyncId属性。node.bootstrap:启用捕获 Node.js 启动里程碑。node.console:启用捕获console.time()和console.count()的输出。node.threadpoolwork.sync:启用对线程池同步操作的跟踪数据捕获,例如blob、zlib、crypto和node_api。node.threadpoolwork.async:启用对线程池异步操作的追踪数据捕获,例如blob、zlib、crypto和node_api。node.dns.native:启用 DNS 查询的跟踪数据捕获。node.net.native:启用网络跟踪数据的捕获。node.environment:启用捕获 Node.js 环境里程碑。node.fs.sync:启用对文件系统同步方法的跟踪数据捕获。node.fs_dir.sync:启用对文件系统同步目录方法的跟踪数据捕获。node.fs.async:启用对文件系统异步方法的跟踪数据捕获。node.fs_dir.async:启用对文件系统异步目录方法的跟踪数据捕获。node.perf:启用 性能 API 测量的捕获。node.perf.usertiming:仅启用捕获性能 API 用户时间的度量和标记。node.perf.timerify:只允许捕获 Performance API timerify 的测量值。
node.promises.rejections:启用捕获跟踪未处理的 Promise 拒绝数量以及之后处理的拒绝的跟踪数据。node.vm.script:启用对node:vm模块的runInNewContext()、runInContext()和runInThisContext()方法的跟踪数据捕获。v8:V8 事件与垃圾回收、编译和执行相关。node.http:启用对 HTTP 请求/响应的跟踪数据捕获。node.module_timer:启用对 CJS 模块加载的跟踪数据捕获。
默认情况下,node、node.async_hooks 和 v8 类别是启用的。
【By default the node, node.async_hooks, and v8 categories are enabled.】
node --trace-event-categories v8,node,node.async_hooks server.js
之前版本的 Node.js 需要使用 --trace-events-enabled 标志来启用跟踪事件。这个要求已经被移除了。然而,--trace-events-enabled 标志仍然可以使用,并默认启用 node、node.async_hooks 和 v8 跟踪事件类别。
【Prior versions of Node.js required the use of the --trace-events-enabled
flag to enable trace events. This requirement has been removed. However, the
--trace-events-enabled flag may still be used and will enable the
node, node.async_hooks, and v8 trace event categories by default.】
node --trace-events-enabled
# is equivalent to
node --trace-event-categories v8,node,node.async_hooks
或者,可以使用 node:trace_events 模块启用跟踪事件:
【Alternatively, trace events may be enabled using the node:trace_events module:】
import { createTracing } from 'node:trace_events';
const tracing = createTracing({ categories: ['node.perf'] });
tracing.enable(); // Enable trace event capture for the 'node.perf' category
// do work
tracing.disable(); // Disable trace event capture for the 'node.perf' categoryconst { createTracing } = require('node:trace_events');
const tracing = createTracing({ categories: ['node.perf'] });
tracing.enable(); // Enable trace event capture for the 'node.perf' category
// do work
tracing.disable(); // Disable trace event capture for the 'node.perf' category
在启用跟踪的情况下运行 Node.js 会生成日志文件,这些文件可以在 Chrome 的 chrome://tracing 标签页中打开。
【Running Node.js with tracing enabled will produce log files that can be opened
in the chrome://tracing
tab of Chrome.】
日志文件默认名为 node_trace.${rotation}.log,其中 ${rotation} 是递增的日志轮换 ID。文件路径模式可以通过 --trace-event-file-pattern 指定,该参数接受一个模板字符串,支持 ${rotation} 和 ${pid}:
【The logging file is by default called node_trace.${rotation}.log, where
${rotation} is an incrementing log-rotation id. The filepath pattern can
be specified with --trace-event-file-pattern that accepts a template
string that supports ${rotation} and ${pid}:】
node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js
为了确保在 SIGINT、SIGTERM 或 SIGBREAK 等信号事件之后日志文件能够正确生成,请确保在代码中有适当的处理程序,例如:
【To guarantee that the log file is properly generated after signal events like
SIGINT, SIGTERM, or SIGBREAK, make sure to have the appropriate handlers
in your code, such as:】
process.on('SIGINT', function onSigint() {
console.info('Received SIGINT.');
process.exit(130); // Or applicable exit code depending on OS and signal
});
追踪系统使用与 process.hrtime() 相同的时间源。 然而,trace-event 的时间戳是以微秒表示的,而 process.hrtime() 返回的是纳秒。
【The tracing system uses the same time source
as the one used by process.hrtime().
However the trace-event timestamps are expressed in microseconds,
unlike process.hrtime() which returns nanoseconds.】
该模块的功能在 Worker 线程中不可用。
【The features from this module are not available in Worker threads.】
node:trace_events 模块#>
【The node:trace_events module】
Tracing 对象#>
【Tracing object】
Tracing 对象用于启用或禁用一组类别的追踪。实例是通过 trace_events.createTracing() 方法创建的。
【The Tracing object is used to enable or disable tracing for sets of
categories. Instances are created using the trace_events.createTracing()
method.】
创建时,Tracing 对象是禁用的。调用 tracing.enable() 方法会将类别添加到已启用的跟踪事件类别集合中。调用 tracing.disable() 将会从已启用的跟踪事件类别集合中移除这些类别。
【When created, the Tracing object is disabled. Calling the
tracing.enable() method adds the categories to the set of enabled trace event
categories. Calling tracing.disable() will remove the categories from the
set of enabled trace event categories.】
tracing.categories#>
此 Tracing 对象所涵盖的跟踪事件类别的逗号分隔列表。
【A comma-separated list of the trace event categories covered by this
Tracing object.】
tracing.disable()#>
禁用此 Tracing 对象。
【Disables this Tracing object.】
只有未被其他已启用的 Tracing 对象覆盖且未被 --trace-event-categories 标志指定的跟踪事件类别才会被禁用。
【Only trace event categories not covered by other enabled Tracing objects
and not specified by the --trace-event-categories flag will be disabled.】
import { createTracing, getEnabledCategories } from 'node:trace_events';
const t1 = createTracing({ categories: ['node', 'v8'] });
const t2 = createTracing({ categories: ['node.perf', 'node'] });
t1.enable();
t2.enable();
// Prints 'node,node.perf,v8'
console.log(getEnabledCategories());
t2.disable(); // Will only disable emission of the 'node.perf' category
// Prints 'node,v8'
console.log(getEnabledCategories());const { createTracing, getEnabledCategories } = require('node:trace_events');
const t1 = createTracing({ categories: ['node', 'v8'] });
const t2 = createTracing({ categories: ['node.perf', 'node'] });
t1.enable();
t2.enable();
// Prints 'node,node.perf,v8'
console.log(getEnabledCategories());
t2.disable(); // Will only disable emission of the 'node.perf' category
// Prints 'node,v8'
console.log(getEnabledCategories());
tracing.enable()#>
启用此 Tracing 对象,用于 Tracing 对象涵盖的类别集合。
【Enables this Tracing object for the set of categories covered by the
Tracing object.】
tracing.enabled#>
- <boolean> 仅当
Tracing对象已启用时为true。
trace_events.createTracing(options)#>
options<Object>categories<string[]> 跟踪类别名称的数组。数组中的值在可能的情况下会被强制转换为字符串。如果值无法被强制转换,则会抛出错误。
- 返回:<Tracing>。
为给定的 categories 创建并返回一个 Tracing 对象。
【Creates and returns a Tracing object for the given set of categories.】
import { createTracing } from 'node:trace_events';
const categories = ['node.perf', 'node.async_hooks'];
const tracing = createTracing({ categories });
tracing.enable();
// do stuff
tracing.disable();const { createTracing } = require('node:trace_events');
const categories = ['node.perf', 'node.async_hooks'];
const tracing = createTracing({ categories });
tracing.enable();
// do stuff
tracing.disable();
trace_events.getEnabledCategories()#>
- 返回:<string>
返回所有当前启用的跟踪事件类别的逗号分隔列表。当前启用的跟踪事件类别集合由所有当前启用的 Tracing 对象的_并集_以及使用 --trace-event-categories 标志启用的任何类别决定。
【Returns a comma-separated list of all currently-enabled trace event
categories. The current set of enabled trace event categories is determined
by the union of all currently-enabled Tracing objects and any categories
enabled using the --trace-event-categories flag.】
给定下面的文件 test.js,命令 node --trace-event-categories node.perf test.js 将在控制台打印 'node.async_hooks,node.perf'。
【Given the file test.js below, the command
node --trace-event-categories node.perf test.js will print
'node.async_hooks,node.perf' to the console.】
import { createTracing, getEnabledCategories } from 'node:trace_events';
const t1 = createTracing({ categories: ['node.async_hooks'] });
const t2 = createTracing({ categories: ['node.perf'] });
const t3 = createTracing({ categories: ['v8'] });
t1.enable();
t2.enable();
console.log(getEnabledCategories());const { createTracing, getEnabledCategories } = require('node:trace_events');
const t1 = createTracing({ categories: ['node.async_hooks'] });
const t2 = createTracing({ categories: ['node.perf'] });
const t3 = createTracing({ categories: ['v8'] });
t1.enable();
t2.enable();
console.log(getEnabledCategories());
示例#>
【Examples】
通过检查器收集跟踪事件数据#>
【Collect trace events data by inspector】
import { Session } from 'node:inspector';
const session = new Session();
session.connect();
function post(message, data) {
return new Promise((resolve, reject) => {
session.post(message, data, (err, result) => {
if (err)
reject(new Error(JSON.stringify(err)));
else
resolve(result);
});
});
}
async function collect() {
const data = [];
session.on('NodeTracing.dataCollected', (chunk) => data.push(chunk));
session.on('NodeTracing.tracingComplete', () => {
// done
});
const traceConfig = { includedCategories: ['v8'] };
await post('NodeTracing.start', { traceConfig });
// do something
setTimeout(() => {
post('NodeTracing.stop').then(() => {
session.disconnect();
console.log(data);
});
}, 1000);
}
collect();'use strict';
const { Session } = require('inspector');
const session = new Session();
session.connect();
function post(message, data) {
return new Promise((resolve, reject) => {
session.post(message, data, (err, result) => {
if (err)
reject(new Error(JSON.stringify(err)));
else
resolve(result);
});
});
}
async function collect() {
const data = [];
session.on('NodeTracing.dataCollected', (chunk) => data.push(chunk));
session.on('NodeTracing.tracingComplete', () => {
// done
});
const traceConfig = { includedCategories: ['v8'] };
await post('NodeTracing.start', { traceConfig });
// do something
setTimeout(() => {
post('NodeTracing.stop').then(() => {
session.disconnect();
console.log(data);
});
}, 1000);
}
collect();