Files
2021-03-26 19:20:48 +00:00

85 lines
10 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="API documentation for the Rust `dispatcher` mod in crate `tracing`."><meta name="keywords" content="rust, rustlang, rust-lang, dispatcher"><title>tracing::dispatcher - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings"></script><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">&#9776;</div><a href='../../tracing/index.html'><div class='logo-container'><img src='https://raw.githubusercontent.com/tokio-rs/tracing/master/assets/logo-type.png' alt='logo'></div></a><p class="location">Module dispatcher</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"><a href="../index.html">tracing</a></p><div id="sidebar-vars" data-name="dispatcher" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" class="help-button">?</button>
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../index.html">tracing</a>::<wbr><a class="mod" href="">dispatcher</a></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../src/tracing/dispatcher.rs.html#1-152" title="goto source code">[src]</a></span></h1><div class="docblock"><p>Dispatches trace events to <a href="struct.Subscriber.html"><code>Subscriber</code></a>s.</p>
<p>The <em>dispatcher</em> is the component of the tracing system which is responsible
for forwarding trace data from the instrumentation points that generate it
to the subscriber that collects it.</p>
<h1 id="using-the-trace-dispatcher" class="section-header"><a href="#using-the-trace-dispatcher">Using the Trace Dispatcher</a></h1>
<p>Every thread in a program using <code>tracing</code> has a <em>default subscriber</em>. When
events occur, or spans are created, they are dispatched to the thread's
current subscriber.</p>
<h2 id="setting-the-default-subscriber" class="section-header"><a href="#setting-the-default-subscriber">Setting the Default Subscriber</a></h2>
<p>By default, the current subscriber is an empty implementation that does
nothing. To use a subscriber implementation, it must be set as the default.
There are two methods for doing so: <a href="fn.with_default.html"><code>with_default</code></a> and
<a href="fn.set_global_default.html"><code>set_global_default</code></a>. <code>with_default</code> sets the default subscriber for the
duration of a scope, while <code>set_global_default</code> sets a default subscriber
for the entire process.</p>
<p>To use either of these functions, we must first wrap our subscriber in a
<a href="struct.Dispatch.html"><code>Dispatch</code></a>, a cloneable, type-erased reference to a subscriber. For
example:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="kw">use</span> <span class="ident">dispatcher</span>::<span class="ident">Dispatch</span>;
<span class="kw">let</span> <span class="ident">my_subscriber</span> <span class="op">=</span> <span class="ident">FooSubscriber</span>::<span class="ident">new</span>();
<span class="kw">let</span> <span class="ident">my_dispatch</span> <span class="op">=</span> <span class="ident">Dispatch</span>::<span class="ident">new</span>(<span class="ident">my_subscriber</span>);</pre></div>
<p>Then, we can use <a href="fn.with_default.html"><code>with_default</code></a> to set our <code>Dispatch</code> as the default for
the duration of a block:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="comment">// no default subscriber</span>
<span class="ident">dispatcher</span>::<span class="ident">with_default</span>(<span class="kw-2">&amp;</span><span class="ident">my_dispatch</span>, <span class="op">|</span><span class="op">|</span> {
<span class="comment">// my_subscriber is the default</span>
});
<span class="comment">// no default subscriber again</span></pre></div>
<p>It's important to note that <code>with_default</code> will not propagate the current
thread's default subscriber to any threads spawned within the <code>with_default</code>
block. To propagate the default subscriber to new threads, either use
<code>with_default</code> from the new thread, or use <code>set_global_default</code>.</p>
<p>As an alternative to <code>with_default</code>, we can use <a href="fn.set_global_default.html"><code>set_global_default</code></a> to
set a <code>Dispatch</code> as the default for all threads, for the lifetime of the
program. For example:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered">
<span class="comment">// no default subscriber</span>
<span class="ident">dispatcher</span>::<span class="ident">set_global_default</span>(<span class="ident">my_dispatch</span>)
<span class="comment">// `set_global_default` will return an error if the global default</span>
<span class="comment">// subscriber has already been set.</span>
.<span class="ident">expect</span>(<span class="string">&quot;global default was already set!&quot;</span>);
<span class="comment">// `my_subscriber` is now the default</span></pre></div>
<div class="information">
<div class="tooltip ignore" style=""><span class="tooltiptext">Note</span></div>
</div>
<div class="example-wrap" style="display:inline-block">
<pre class="ignore" style="white-space:normal;font:inherit;">
<strong>Note</strong>: The thread-local scoped dispatcher (<code>with_default</code>)
requires the Rust standard library. <code>no_std</code> users should
use <a href="fn.set_global_default.html"><code>set_global_default</code></a>
instead.
</pre></div>
<h2 id="accessing-the-default-subscriber" class="section-header"><a href="#accessing-the-default-subscriber">Accessing the Default Subscriber</a></h2>
<p>A thread's current default subscriber can be accessed using the
<a href="fn.get_default.html"><code>get_default</code></a> function, which executes a closure with a reference to the
currently default <code>Dispatch</code>. This is used primarily by <code>tracing</code>
instrumentation.</p>
</div><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
<table><tr class="module-item"><td><a class="struct" href="struct.DefaultGuard.html" title="tracing::dispatcher::DefaultGuard struct">DefaultGuard</a></td><td class="docblock-short"><p>A guard that resets the current default dispatcher to the prior
default dispatcher when dropped.</p>
</td></tr><tr class="module-item"><td><a class="struct" href="struct.Dispatch.html" title="tracing::dispatcher::Dispatch struct">Dispatch</a></td><td class="docblock-short"><p><code>Dispatch</code> trace data to a <a href="trait.Subscriber.html"><code>Subscriber</code></a>.</p>
</td></tr><tr class="module-item"><td><a class="struct" href="struct.SetGlobalDefaultError.html" title="tracing::dispatcher::SetGlobalDefaultError struct">SetGlobalDefaultError</a></td><td class="docblock-short"><p>Returned if setting the global dispatcher fails.</p>
</td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
<table><tr class="module-item"><td><a class="fn" href="fn.get_default.html" title="tracing::dispatcher::get_default fn">get_default</a></td><td class="docblock-short"><p>Executes a closure with a reference to this thread's current <a href="../dispatcher/struct.Dispatch.html">dispatcher</a>.</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.set_default.html" title="tracing::dispatcher::set_default fn">set_default</a></td><td class="docblock-short"><p>Sets the dispatch as the default dispatch for the duration of the lifetime
of the returned DefaultGuard</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.set_global_default.html" title="tracing::dispatcher::set_global_default fn">set_global_default</a></td><td class="docblock-short"><p>Sets this dispatch as the global default for the duration of the entire program.
Will be used as a fallback if no thread-local dispatch has been set in a thread
(using <code>with_default</code>.)</p>
</td></tr><tr class="module-item"><td><a class="fn" href="fn.with_default.html" title="tracing::dispatcher::with_default fn">with_default</a></td><td class="docblock-short"><p>Sets this dispatch as the default for the duration of a closure.</p>
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><div id="rustdoc-vars" data-root-path="../../" data-current-crate="tracing"></div>
<script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html>