This repository has been archived on 2022-04-04. You can view files and clone it, but cannot push or open issues or pull requests.

78 lines
12 KiB
HTML
Raw 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="Dispatches trace events to `Subscriber`s."><meta name="keywords" content="rust, rustlang, rust-lang, dispatcher"><title>tracing_core::dispatcher - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><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="../../ayu.css" disabled><link rel="stylesheet" type="text/css" href="../../dark.css" disabled><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script src="../../crates.js"></script><script defer src="../../main.js"></script>
<noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a class="sidebar-logo" href="../../tracing_core/index.html"><div class="logo-container"><img src="https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;tokio-rs&#x2F;tracing&#x2F;master&#x2F;assets&#x2F;logo-type.png" alt="logo"></div>
</a><h2 class="location">Module dispatcher</h2><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><div id="sidebar-vars" data-name="dispatcher" data-ty="mod" data-relpath="./"></div><script defer src="./sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../tracing_core/index.html"><img src="https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;tokio-rs&#x2F;tracing&#x2F;master&#x2F;assets&#x2F;logo-type.png" alt="logo"></a><nav class="sub"><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="18" height="18" alt="Pick another theme!" src="../../brush.svg"></button><div id="theme-choices" role="menu"></div></div><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" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"></div><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../../settings.html" title="settings"><img width="18" height="18" alt="Change settings" src="../../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../index.html">tracing_core</a>::<wbr><a class="mod" href="#">dispatcher</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></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_core/dispatcher.rs.html#1-910" title="goto source code">[src]</a></span></h1><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><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>
<h2 id="using-the-trace-dispatcher" class="section-header"><a href="#using-the-trace-dispatcher">Using the Trace Dispatcher</a></h2>
<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 threads
current subscriber.</p>
<h3 id="setting-the-default-subscriber" class="section-header"><a href="#setting-the-default-subscriber">Setting the Default Subscriber</a></h3>
<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"><code><span class="kw">use</span> <span class="ident">dispatcher::Dispatch</span>;
<span class="kw">let</span> <span class="ident">my_subscriber</span> <span class="op">=</span> <span class="ident">FooSubscriber::new</span>();
<span class="kw">let</span> <span class="ident">my_dispatch</span> <span class="op">=</span> <span class="ident">Dispatch::new</span>(<span class="ident">my_subscriber</span>);</code></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"><code><span class="comment">// no default subscriber</span>
<span class="ident">dispatcher::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></code></pre></div>
<p>Its important to note that <code>with_default</code> will not propagate the current
threads 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"><code><span class="comment">// no default subscriber</span>
<span class="ident">dispatcher::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></code></pre></div>
<pre class="ignore" style="white-space:normal;font:inherit;">
<strong>Note</strong>:the thread-local scoped dispatcher
(<a href="#fn.with_default"><code>with_default</code></a>) requires the
Rust standard library. <code>no_std</code> users should use
<a href="#fn.set_global_default"><code>set_global_default</code></a>
instead.
</pre>
<h3 id="accessing-the-default-subscriber" class="section-header"><a href="#accessing-the-default-subscriber">Accessing the Default Subscriber</a></h3>
<p>A threads 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></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2>
<div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.DefaultGuard.html" title="tracing_core::dispatcher::DefaultGuard struct">DefaultGuard</a></div><div class="item-right docblock-short"><p>A guard that resets the current default dispatcher to the prior
default dispatcher when dropped.</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.Dispatch.html" title="tracing_core::dispatcher::Dispatch struct">Dispatch</a></div><div class="item-right docblock-short"><p><code>Dispatch</code> trace data to a <a href="trait.Subscriber.html"><code>Subscriber</code></a>.</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.SetGlobalDefaultError.html" title="tracing_core::dispatcher::SetGlobalDefaultError struct">SetGlobalDefaultError</a></div><div class="item-right docblock-short"><p>Returned if setting the global dispatcher fails.</p>
</div></div></div><h2 id="functions" class="small-section-header"><a href="#functions">Functions</a></h2>
<div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.get_default.html" title="tracing_core::dispatcher::get_default fn">get_default</a></div><div class="item-right docblock-short"><p>Executes a closure with a reference to this threads current <a href="../dispatcher/struct.Dispatch.html">dispatcher</a>.</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.set_default.html" title="tracing_core::dispatcher::set_default fn">set_default</a></div><div class="item-right docblock-short"><p>Sets the dispatch as the default dispatch for the duration of the lifetime
of the returned DefaultGuard</p>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.set_global_default.html" title="tracing_core::dispatcher::set_global_default fn">set_global_default</a></div><div class="item-right 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>
</div></div><div class="item-row"><div class="item-left module-item"><a class="fn" href="fn.with_default.html" title="tracing_core::dispatcher::with_default fn">with_default</a></div><div class="item-right docblock-short"><p>Sets this dispatch as the default for the duration of a closure.</p>
</div></div></div></section><section id="search" class="content hidden"></section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="tracing_core" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.59.0 (9d1b2106e 2022-02-23)" ></div>
</body></html>