TracingChannel 通道


¥TracingChannel Channels

TracingChannel 是多个 diagnostics_channels 的集合,表示单个可跟踪操作的执行生命周期中的特定点。该行为分为五个 diagnostics_channels,包括 startendasyncStartasyncEnderror。单个可跟踪操作将在所有事件之间共享相同的事件对象,这有助于通过 weakmap 管理相关性。

¥A TracingChannel is a collection of several diagnostics_channels representing specific points in the execution lifecycle of a single traceable action. The behavior is split into five diagnostics_channels consisting of start, end, asyncStart, asyncEnd, and error. A single traceable action will share the same event object between all events, this can be helpful for managing correlation through a weakmap.

当任务 "completes" 时,这些事件对象将使用 resulterror 值进行扩展。在同步任务的情况下,result 将是返回值,error 将是函数抛出的任何值。对于基于回调的异步函数,result 将是回调的第二个参数,而 error 将是 end 事件中可见的抛出错误或 asyncStartasyncEnd 事件中的第一个回调参数。

¥These event objects will be extended with result or error values when the task "completes". In the case of a synchronous task the result will be the return value and the error will be anything thrown from the function. With callback-based async functions the result will be the second argument of the callback while the error will either be a thrown error visible in the end event or the first callback argument in either of the asyncStart or asyncEnd events.

为了确保仅形成正确的跟踪图,仅当订阅者在开始跟踪之前存在时才应发布事件。跟踪开始后添加的订阅不应接收来自该跟踪的未来事件,只能看到未来的跟踪。

¥To ensure only correct trace graphs are formed, events should only be published if subscribers are present prior to starting the trace. Subscriptions which are added after the trace begins should not receive future events from that trace, only future traces will be seen.

跟踪通道应遵循以下命名模式:

¥Tracing channels should follow a naming pattern of:

  • tracing:module.class.method:starttracing:module.function:start

    ¥tracing:module.class.method:start or tracing:module.function:start

  • tracing:module.class.method:endtracing:module.function:end

    ¥tracing:module.class.method:end or tracing:module.function:end

  • tracing:module.class.method:asyncStarttracing:module.function:asyncStart

    ¥tracing:module.class.method:asyncStart or tracing:module.function:asyncStart

  • tracing:module.class.method:asyncEndtracing:module.function:asyncEnd

    ¥tracing:module.class.method:asyncEnd or tracing:module.function:asyncEnd

  • tracing:module.class.method:errortracing:module.function:error

    ¥tracing:module.class.method:error or tracing:module.function:error