1{ 2 "type": "module", 3 "source": "doc/api/tracing.md", 4 "modules": [ 5 { 6 "textRaw": "Trace events", 7 "name": "trace_events", 8 "introduced_in": "v7.7.0", 9 "stability": 1, 10 "stabilityText": "Experimental", 11 "desc": "<p><strong>Source Code:</strong> <a href=\"https://github.com/nodejs/node/blob/v14.20.1/lib/trace_events.js\">lib/trace_events.js</a></p>\n<p>The <code>trace_events</code> module provides a mechanism to centralize tracing information\ngenerated by V8, Node.js core, and userspace code.</p>\n<p>Tracing can be enabled with the <code>--trace-event-categories</code> command-line flag\nor by using the <code>trace_events</code> module. The <code>--trace-event-categories</code> flag\naccepts a list of comma-separated category names.</p>\n<p>The available categories are:</p>\n<ul>\n<li><code>node</code>: An empty placeholder.</li>\n<li><code>node.async_hooks</code>: Enables capture of detailed <a href=\"async_hooks.html\"><code>async_hooks</code></a> trace data.\nThe <a href=\"async_hooks.html\"><code>async_hooks</code></a> events have a unique <code>asyncId</code> and a special <code>triggerId</code>\n<code>triggerAsyncId</code> property.</li>\n<li><code>node.bootstrap</code>: Enables capture of Node.js bootstrap milestones.</li>\n<li><code>node.console</code>: Enables capture of <code>console.time()</code> and <code>console.count()</code>\noutput.</li>\n<li><code>node.dns.native</code>: Enables capture of trace data for DNS queries.</li>\n<li><code>node.environment</code>: Enables capture of Node.js Environment milestones.</li>\n<li><code>node.fs.sync</code>: Enables capture of trace data for file system sync methods.</li>\n<li><code>node.perf</code>: Enables capture of <a href=\"perf_hooks.html\">Performance API</a> measurements.\n<ul>\n<li><code>node.perf.usertiming</code>: Enables capture of only Performance API User Timing\nmeasures and marks.</li>\n<li><code>node.perf.timerify</code>: Enables capture of only Performance API timerify\nmeasurements.</li>\n</ul>\n</li>\n<li><code>node.promises.rejections</code>: Enables capture of trace data tracking the number\nof unhandled Promise rejections and handled-after-rejections.</li>\n<li><code>node.vm.script</code>: Enables capture of trace data for the <code>vm</code> module's\n<code>runInNewContext()</code>, <code>runInContext()</code>, and <code>runInThisContext()</code> methods.</li>\n<li><code>v8</code>: The <a href=\"v8.html\">V8</a> events are GC, compiling, and execution related.</li>\n</ul>\n<p>By default the <code>node</code>, <code>node.async_hooks</code>, and <code>v8</code> categories are enabled.</p>\n<pre><code class=\"language-bash\">node --trace-event-categories v8,node,node.async_hooks server.js\n</code></pre>\n<p>Prior versions of Node.js required the use of the <code>--trace-events-enabled</code>\nflag to enable trace events. This requirement has been removed. However, the\n<code>--trace-events-enabled</code> flag <em>may</em> still be used and will enable the\n<code>node</code>, <code>node.async_hooks</code>, and <code>v8</code> trace event categories by default.</p>\n<pre><code class=\"language-bash\">node --trace-events-enabled\n\n# is equivalent to\n\nnode --trace-event-categories v8,node,node.async_hooks\n</code></pre>\n<p>Alternatively, trace events may be enabled using the <code>trace_events</code> module:</p>\n<pre><code class=\"language-js\">const trace_events = require('trace_events');\nconst tracing = trace_events.createTracing({ categories: ['node.perf'] });\ntracing.enable(); // Enable trace event capture for the 'node.perf' category\n\n// do work\n\ntracing.disable(); // Disable trace event capture for the 'node.perf' category\n</code></pre>\n<p>Running Node.js with tracing enabled will produce log files that can be opened\nin the <a href=\"https://www.chromium.org/developers/how-tos/trace-event-profiling-tool\"><code>chrome://tracing</code></a>\ntab of Chrome.</p>\n<p>The logging file is by default called <code>node_trace.${rotation}.log</code>, where\n<code>${rotation}</code> is an incrementing log-rotation id. The filepath pattern can\nbe specified with <code>--trace-event-file-pattern</code> that accepts a template\nstring that supports <code>${rotation}</code> and <code>${pid}</code>:</p>\n<pre><code class=\"language-bash\">node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js\n</code></pre>\n<p>The tracing system uses the same time source\nas the one used by <code>process.hrtime()</code>.\nHowever the trace-event timestamps are expressed in microseconds,\nunlike <code>process.hrtime()</code> which returns nanoseconds.</p>\n<p>The features from this module are not available in <a href=\"worker_threads.html#worker_threads_class_worker\"><code>Worker</code></a> threads.</p>", 12 "modules": [ 13 { 14 "textRaw": "The `trace_events` module", 15 "name": "the_`trace_events`_module", 16 "meta": { 17 "added": [ 18 "v10.0.0" 19 ], 20 "changes": [] 21 }, 22 "modules": [ 23 { 24 "textRaw": "`Tracing` object", 25 "name": "`tracing`_object", 26 "meta": { 27 "added": [ 28 "v10.0.0" 29 ], 30 "changes": [] 31 }, 32 "desc": "<p>The <code>Tracing</code> object is used to enable or disable tracing for sets of\ncategories. Instances are created using the <code>trace_events.createTracing()</code>\nmethod.</p>\n<p>When created, the <code>Tracing</code> object is disabled. Calling the\n<code>tracing.enable()</code> method adds the categories to the set of enabled trace event\ncategories. Calling <code>tracing.disable()</code> will remove the categories from the\nset of enabled trace event categories.</p>", 33 "properties": [ 34 { 35 "textRaw": "`categories` {string}", 36 "type": "string", 37 "name": "categories", 38 "meta": { 39 "added": [ 40 "v10.0.0" 41 ], 42 "changes": [] 43 }, 44 "desc": "<p>A comma-separated list of the trace event categories covered by this\n<code>Tracing</code> object.</p>" 45 }, 46 { 47 "textRaw": "`enabled` {boolean} `true` only if the `Tracing` object has been enabled.", 48 "type": "boolean", 49 "name": "enabled", 50 "meta": { 51 "added": [ 52 "v10.0.0" 53 ], 54 "changes": [] 55 }, 56 "desc": "`true` only if the `Tracing` object has been enabled." 57 } 58 ], 59 "methods": [ 60 { 61 "textRaw": "`tracing.disable()`", 62 "type": "method", 63 "name": "disable", 64 "meta": { 65 "added": [ 66 "v10.0.0" 67 ], 68 "changes": [] 69 }, 70 "signatures": [ 71 { 72 "params": [] 73 } 74 ], 75 "desc": "<p>Disables this <code>Tracing</code> object.</p>\n<p>Only trace event categories <em>not</em> covered by other enabled <code>Tracing</code> objects\nand <em>not</em> specified by the <code>--trace-event-categories</code> flag will be disabled.</p>\n<pre><code class=\"language-js\">const trace_events = require('trace_events');\nconst t1 = trace_events.createTracing({ categories: ['node', 'v8'] });\nconst t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] });\nt1.enable();\nt2.enable();\n\n// Prints 'node,node.perf,v8'\nconsole.log(trace_events.getEnabledCategories());\n\nt2.disable(); // Will only disable emission of the 'node.perf' category\n\n// Prints 'node,v8'\nconsole.log(trace_events.getEnabledCategories());\n</code></pre>" 76 }, 77 { 78 "textRaw": "`tracing.enable()`", 79 "type": "method", 80 "name": "enable", 81 "meta": { 82 "added": [ 83 "v10.0.0" 84 ], 85 "changes": [] 86 }, 87 "signatures": [ 88 { 89 "params": [] 90 } 91 ], 92 "desc": "<p>Enables this <code>Tracing</code> object for the set of categories covered by the\n<code>Tracing</code> object.</p>" 93 } 94 ], 95 "type": "module", 96 "displayName": "`Tracing` object" 97 } 98 ], 99 "methods": [ 100 { 101 "textRaw": "`trace_events.createTracing(options)`", 102 "type": "method", 103 "name": "createTracing", 104 "meta": { 105 "added": [ 106 "v10.0.0" 107 ], 108 "changes": [] 109 }, 110 "signatures": [ 111 { 112 "return": { 113 "textRaw": "Returns: {Tracing}.", 114 "name": "return", 115 "type": "Tracing", 116 "desc": "." 117 }, 118 "params": [ 119 { 120 "textRaw": "`options` {Object}", 121 "name": "options", 122 "type": "Object", 123 "options": [ 124 { 125 "textRaw": "`categories` {string[]} An array of trace category names. Values included in the array are coerced to a string when possible. An error will be thrown if the value cannot be coerced.", 126 "name": "categories", 127 "type": "string[]", 128 "desc": "An array of trace category names. Values included in the array are coerced to a string when possible. An error will be thrown if the value cannot be coerced." 129 } 130 ] 131 } 132 ] 133 } 134 ], 135 "desc": "<p>Creates and returns a <code>Tracing</code> object for the given set of <code>categories</code>.</p>\n<pre><code class=\"language-js\">const trace_events = require('trace_events');\nconst categories = ['node.perf', 'node.async_hooks'];\nconst tracing = trace_events.createTracing({ categories });\ntracing.enable();\n// do stuff\ntracing.disable();\n</code></pre>" 136 }, 137 { 138 "textRaw": "`trace_events.getEnabledCategories()`", 139 "type": "method", 140 "name": "getEnabledCategories", 141 "meta": { 142 "added": [ 143 "v10.0.0" 144 ], 145 "changes": [] 146 }, 147 "signatures": [ 148 { 149 "return": { 150 "textRaw": "Returns: {string}", 151 "name": "return", 152 "type": "string" 153 }, 154 "params": [] 155 } 156 ], 157 "desc": "<p>Returns a comma-separated list of all currently-enabled trace event\ncategories. The current set of enabled trace event categories is determined\nby the <em>union</em> of all currently-enabled <code>Tracing</code> objects and any categories\nenabled using the <code>--trace-event-categories</code> flag.</p>\n<p>Given the file <code>test.js</code> below, the command\n<code>node --trace-event-categories node.perf test.js</code> will print\n<code>'node.async_hooks,node.perf'</code> to the console.</p>\n<pre><code class=\"language-js\">const trace_events = require('trace_events');\nconst t1 = trace_events.createTracing({ categories: ['node.async_hooks'] });\nconst t2 = trace_events.createTracing({ categories: ['node.perf'] });\nconst t3 = trace_events.createTracing({ categories: ['v8'] });\n\nt1.enable();\nt2.enable();\n\nconsole.log(trace_events.getEnabledCategories());\n</code></pre>" 158 } 159 ], 160 "type": "module", 161 "displayName": "The `trace_events` module" 162 } 163 ], 164 "type": "module", 165 "displayName": "Trace events" 166 } 167 ] 168}