| <!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="Trait representing the functions required to collect trace data."><meta name="keywords" content="rust, rustlang, rust-lang, Subscriber"><title>Subscriber in tracing - 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" href="../normalize.css"><link rel="stylesheet" href="../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../ayu.css" disabled><link rel="stylesheet" href="../dark.css" disabled><link rel="stylesheet" href="../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../storage.js"></script><script defer src="sidebar-items.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 trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" 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><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" 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><h2 class="location"><a href="#">Subscriber</a></h2><div class="sidebar-elems"><section><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.enabled">enabled</a></li><li><a href="#tymethod.enter">enter</a></li><li><a href="#tymethod.event">event</a></li><li><a href="#tymethod.exit">exit</a></li><li><a href="#tymethod.new_span">new_span</a></li><li><a href="#tymethod.record">record</a></li><li><a href="#tymethod.record_follows_from">record_follows_from</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.clone_span">clone_span</a></li><li><a href="#method.current_span">current_span</a></li><li><a href="#method.downcast_raw">downcast_raw</a></li><li><a href="#method.drop_span">drop_span</a></li><li><a href="#method.event_enabled">event_enabled</a></li><li><a href="#method.max_level_hint">max_level_hint</a></li><li><a href="#method.on_register_dispatch">on_register_dispatch</a></li><li><a href="#method.register_callsite">register_callsite</a></li><li><a href="#method.try_close">try_close</a></li></ul><h3><a href="#foreign-impls">Implementations on Foreign Types</a></h3><ul class="block"><li><a href="#impl-Subscriber-for-Arc%3CS%3E">Arc<S></a></li><li><a href="#impl-Subscriber-for-Box%3CS%2C%20Global%3E">Box<S, Global></a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block"><li><a href="#method.downcast_ref">downcast_ref</a></li><li><a href="#method.downcast_ref-1">downcast_ref</a></li><li><a href="#method.downcast_ref-2">downcast_ref</a></li><li><a href="#method.downcast_ref-3">downcast_ref</a></li><li><a href="#method.is">is</a></li><li><a href="#method.is-1">is</a></li><li><a href="#method.is-2">is</a></li><li><a href="#method.is-3">is</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><h2><a href="index.html">In tracing</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Trait <a href="index.html">tracing</a>::<wbr><a class="trait" href="#">Subscriber</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></h1><span class="out-of-band"><a class="srclink" href="../src/tracing_core/subscriber.rs.html#83">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span></div><div class="item-decl"><pre class="rust trait"><code>pub trait Subscriber: 'static { |
| <details class="rustdoc-toggle type-contents-toggle"><summary class="hideme"><span>Show 16 methods</span></summary> fn <a href="#tymethod.enabled" class="fnname">enabled</a>(&self, metadata: &<a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'_>) -> bool; |
| <span class="item-spacer"></span> fn <a href="#tymethod.new_span" class="fnname">new_span</a>(&self, span: &<a class="struct" href="span/struct.Attributes.html" title="struct tracing::span::Attributes">Attributes</a><'_>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>; |
| <span class="item-spacer"></span> fn <a href="#tymethod.record" class="fnname">record</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, values: &<a class="struct" href="span/struct.Record.html" title="struct tracing::span::Record">Record</a><'_>); |
| <span class="item-spacer"></span> fn <a href="#tymethod.record_follows_from" class="fnname">record_follows_from</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, follows: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>); |
| <span class="item-spacer"></span> fn <a href="#tymethod.event" class="fnname">event</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>); |
| <span class="item-spacer"></span> fn <a href="#tymethod.enter" class="fnname">enter</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>); |
| <span class="item-spacer"></span> fn <a href="#tymethod.exit" class="fnname">exit</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>); |
| |
| fn <a href="#method.on_register_dispatch" class="fnname">on_register_dispatch</a>(&self, subscriber: &<a class="struct" href="struct.Dispatch.html" title="struct tracing::Dispatch">Dispatch</a>) { ... } |
| <span class="item-spacer"></span> fn <a href="#method.register_callsite" class="fnname">register_callsite</a>(&self, metadata: &'static <a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'static>) -> <a class="struct" href="subscriber/struct.Interest.html" title="struct tracing::subscriber::Interest">Interest</a> { ... } |
| <span class="item-spacer"></span> fn <a href="#method.max_level_hint" class="fnname">max_level_hint</a>(&self) -> Option<<a class="struct" href="level_filters/struct.LevelFilter.html" title="struct tracing::level_filters::LevelFilter">LevelFilter</a>> { ... } |
| <span class="item-spacer"></span> fn <a href="#method.event_enabled" class="fnname">event_enabled</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>) -> bool { ... } |
| <span class="item-spacer"></span> fn <a href="#method.clone_span" class="fnname">clone_span</a>(&self, id: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a> { ... } |
| <span class="item-spacer"></span> fn <a href="#method.drop_span" class="fnname">drop_span</a>(&self, _id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) { ... } |
| <span class="item-spacer"></span> fn <a href="#method.try_close" class="fnname">try_close</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> bool { ... } |
| <span class="item-spacer"></span> fn <a href="#method.current_span" class="fnname">current_span</a>(&self) -> <a class="struct" href="../tracing_core/span/struct.Current.html" title="struct tracing_core::span::Current">Current</a> { ... } |
| <span class="item-spacer"></span> unsafe fn <a href="#method.downcast_raw" class="fnname">downcast_raw</a>(&self, id: TypeId) -> Option<*const ()> { ... } |
| </details>}</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Trait representing the functions required to collect trace data.</p> |
| <p>Crates that provide implementations of methods for collecting or recording |
| trace data should implement the <code>Subscriber</code> interface. This trait is |
| intended to represent fundamental primitives for collecting trace events and |
| spans — other libraries may offer utility functions and types to make |
| subscriber implementations more modular or improve the ergonomics of writing |
| subscribers.</p> |
| <p>A subscriber is responsible for the following:</p> |
| <ul> |
| <li>Registering new spans as they are created, and providing them with span |
| IDs. Implicitly, this means the subscriber may determine the strategy for |
| determining span equality.</li> |
| <li>Recording the attachment of field values and follows-from annotations to |
| spans.</li> |
| <li>Filtering spans and events, and determining when those filters must be |
| invalidated.</li> |
| <li>Observing spans as they are entered, exited, and closed, and events as |
| they occur.</li> |
| </ul> |
| <p>When a span is entered or exited, the subscriber is provided only with the |
| <a href="span/struct.Id.html">ID</a> with which it tagged that span when it was created. This means |
| that it is up to the subscriber to determine whether and how span <em>data</em> — |
| the fields and metadata describing the span — should be stored. The |
| <a href="trait.Subscriber.html#tymethod.new_span"><code>new_span</code></a> function is called when a new span is created, and at that |
| point, the subscriber <em>may</em> choose to store the associated data if it will |
| be referenced again. However, if the data has already been recorded and will |
| not be needed by the implementations of <code>enter</code> and <code>exit</code>, the subscriber |
| may freely discard that data without allocating space to store it.</p> |
| <h3 id="overriding-default-impls"><a href="#overriding-default-impls">Overriding default impls</a></h3> |
| <p>Some trait methods on <code>Subscriber</code> have default implementations, either in |
| order to reduce the surface area of implementing <code>Subscriber</code>, or for |
| backward-compatibility reasons. However, many subscribers will likely want |
| to override these default implementations.</p> |
| <p>The following methods are likely of interest:</p> |
| <ul> |
| <li> |
| <p><a href="trait.Subscriber.html#method.register_callsite"><code>register_callsite</code></a> is called once for each callsite from which a span |
| event may originate, and returns an <a href="subscriber/struct.Interest.html" title="Interest"><code>Interest</code></a> value describing whether or |
| not the subscriber wishes to see events or spans from that callsite. By |
| default, it calls <a href="trait.Subscriber.html#tymethod.enabled"><code>enabled</code></a>, and returns <code>Interest::always()</code> if |
| <code>enabled</code> returns true, or <code>Interest::never()</code> if enabled returns false. |
| However, if the subscriber’s interest can change dynamically at runtime, |
| it may want to override this function to return <code>Interest::sometimes()</code>. |
| Additionally, subscribers which wish to perform a behaviour once for each |
| callsite, such as allocating storage for data related to that callsite, |
| can perform it in <code>register_callsite</code>.</p> |
| <p>See also the <a href="../tracing_core/callsite/index.html#registering-callsites">documentation on the callsite registry</a> for details |
| on <a href="trait.Subscriber.html#method.register_callsite"><code>register_callsite</code></a>.</p> |
| </li> |
| <li> |
| <p><a href="trait.Subscriber.html#method.event_enabled"><code>event_enabled</code></a> is called once before every call to the <a href="trait.Subscriber.html#tymethod.event"><code>event</code></a> |
| method. This can be used to implement filtering on events once their field |
| values are known, but before any processing is done in the <code>event</code> method.</p> |
| </li> |
| <li> |
| <p><a href="trait.Subscriber.html#method.clone_span"><code>clone_span</code></a> is called every time a span ID is cloned, and <a href="trait.Subscriber.html#method.try_close"><code>try_close</code></a> |
| is called when a span ID is dropped. By default, these functions do |
| nothing. However, they can be used to implement reference counting for |
| spans, allowing subscribers to free storage for span data and to determine |
| when a span has <em>closed</em> permanently (rather than being exited). |
| Subscribers which store per-span data or which need to track span closures |
| should override these functions together.</p> |
| </li> |
| </ul> |
| </div></details><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.enabled" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#206">source</a><h4 class="code-header">fn <a href="#tymethod.enabled" class="fnname">enabled</a>(&self, metadata: &<a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'_>) -> bool</h4></section></summary><div class="docblock"><p>Returns true if a span or event with the specified <a href="struct.Metadata.html">metadata</a> would be |
| recorded.</p> |
| <p>By default, it is assumed that this filter needs only be evaluated once |
| for each callsite, so it is called by <a href="trait.Subscriber.html#method.register_callsite"><code>register_callsite</code></a> when each |
| callsite is registered. The result is used to determine if the subscriber |
| is always <a href="subscriber/struct.Interest.html">interested</a> or never interested in that callsite. This is intended |
| primarily as an optimization, so that expensive filters (such as those |
| involving string search, et cetera) need not be re-evaluated.</p> |
| <p>However, if the subscriber’s interest in a particular span or event may |
| change, or depends on contexts only determined dynamically at runtime, |
| then the <code>register_callsite</code> method should be overridden to return |
| <a href="subscriber/struct.Interest.html#method.sometimes"><code>Interest::sometimes</code></a>. In that case, this function will be called every |
| time that span or event occurs.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.new_span" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#258">source</a><h4 class="code-header">fn <a href="#tymethod.new_span" class="fnname">new_span</a>(&self, span: &<a class="struct" href="span/struct.Attributes.html" title="struct tracing::span::Attributes">Attributes</a><'_>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section></summary><div class="docblock"><p>Visit the construction of a new span, returning a new <a href="span/struct.Id.html">span ID</a> for the |
| span being constructed.</p> |
| <p>The provided <a href="span/struct.Attributes.html"><code>Attributes</code></a> contains any field values that were provided |
| when the span was created. The subscriber may pass a <a href="field/trait.Visit.html">visitor</a> to the |
| <code>Attributes</code>’ <a href="span/struct.Attributes.html#method.record"><code>record</code> method</a> to record these values.</p> |
| <p>IDs are used to uniquely identify spans and events within the context of a |
| subscriber, so span equality will be based on the returned ID. Thus, if |
| the subscriber wishes for all spans with the same metadata to be |
| considered equal, it should return the same ID every time it is given a |
| particular set of metadata. Similarly, if it wishes for two separate |
| instances of a span with the same metadata to <em>not</em> be equal, it should |
| return a distinct ID every time this function is called, regardless of |
| the metadata.</p> |
| <p>Note that the subscriber is free to assign span IDs based on whatever |
| scheme it sees fit. Any guarantees about uniqueness, ordering, or ID |
| reuse are left up to the subscriber implementation to determine.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.record" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#298">source</a><h4 class="code-header">fn <a href="#tymethod.record" class="fnname">record</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, values: &<a class="struct" href="span/struct.Record.html" title="struct tracing::span::Record">Record</a><'_>)</h4></section></summary><div class="docblock"><p>Record a set of values on a span.</p> |
| <p>This method will be invoked when value is recorded on a span. |
| Recording multiple values for the same field is possible, |
| but the actual behaviour is defined by the subscriber implementation.</p> |
| <p>Keep in mind that a span might not provide a value |
| for each field it declares.</p> |
| <p>The subscriber is expected to provide a <a href="field/trait.Visit.html">visitor</a> to the <code>Record</code>’s |
| <a href="span/struct.Record.html#method.record"><code>record</code> method</a> in order to record the added values.</p> |
| <h5 id="example"><a href="#example">Example</a></h5> |
| <p>“foo = 3” will be recorded when <a href="span/struct.Attributes.html#method.record"><code>record</code></a> is called on the |
| <code>Attributes</code> passed to <code>new_span</code>. |
| Since values are not provided for the <code>bar</code> and <code>baz</code> fields, |
| the span’s <code>Metadata</code> will indicate that it <em>has</em> those fields, |
| but values for them won’t be recorded at this time.</p> |
| |
| <div class="example-wrap ignore"><div class='tooltip'>ⓘ</div><pre class="rust rust-example-rendered"><code> |
| <span class="kw">let </span><span class="kw-2">mut </span>span = <span class="macro">span!</span>(<span class="string">"my_span"</span>, foo = <span class="number">3</span>, bar, baz); |
| |
| <span class="comment">// `Subscriber::record` will be called with a `Record` |
| // containing "bar = false" |
| </span>span.record(<span class="string">"bar"</span>, <span class="kw-2">&</span><span class="bool-val">false</span>); |
| |
| <span class="comment">// `Subscriber::record` will be called with a `Record` |
| // containing "baz = "a string"" |
| </span>span.record(<span class="string">"baz"</span>, <span class="kw-2">&</span><span class="string">"a string"</span>);</code></pre></div> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.record_follows_from" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#318">source</a><h4 class="code-header">fn <a href="#tymethod.record_follows_from" class="fnname">record_follows_from</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, follows: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><div class="docblock"><p>Adds an indication that <code>span</code> follows from the span with the id |
| <code>follows</code>.</p> |
| <p>This relationship differs somewhat from the parent-child relationship: a |
| span may have any number of prior spans, rather than a single one; and |
| spans are not considered to be executing <em>inside</em> of the spans they |
| follow from. This means that a span may close even if subsequent spans |
| that follow from it are still open, and time spent inside of a |
| subsequent span should not be included in the time its precedents were |
| executing. This is used to model causal relationships such as when a |
| single future spawns several related background tasks, et cetera.</p> |
| <p>If the subscriber has spans corresponding to the given IDs, it should |
| record this relationship in whatever way it deems necessary. Otherwise, |
| if one or both of the given span IDs do not correspond to spans that the |
| subscriber knows about, or if a cyclical relationship would be created |
| (i.e., some span <em>a</em> which proceeds some other span <em>b</em> may not also |
| follow from <em>b</em>), it may silently do nothing.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.event" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#349">source</a><h4 class="code-header">fn <a href="#tymethod.event" class="fnname">event</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>)</h4></section></summary><div class="docblock"><p>Records that an <a href="event/struct.Event.html"><code>Event</code></a> has occurred.</p> |
| <p>This method will be invoked when an Event is constructed by |
| the <code>Event</code>’s <a href="event/struct.Event.html#method.dispatch"><code>dispatch</code> method</a>. For example, this happens internally |
| when an event macro from <code>tracing</code> is called.</p> |
| <p>The key difference between this method and <code>record</code> is that <code>record</code> is |
| called when a value is recorded for a field defined by a span, |
| while <code>event</code> is called when a new event occurs.</p> |
| <p>The provided <code>Event</code> struct contains any field values attached to the |
| event. The subscriber may pass a <a href="field/trait.Visit.html">visitor</a> to the <code>Event</code>’s |
| <a href="event/struct.Event.html#method.record"><code>record</code> method</a> to record these values.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.enter" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#359">source</a><h4 class="code-header">fn <a href="#tymethod.enter" class="fnname">enter</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><div class="docblock"><p>Records that a span has been entered.</p> |
| <p>When entering a span, this method is called to notify the subscriber |
| that the span has been entered. The subscriber is provided with the |
| <a href="span/struct.Id.html">span ID</a> of the entered span, and should update any internal state |
| tracking the current span accordingly.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="tymethod.exit" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#371">source</a><h4 class="code-header">fn <a href="#tymethod.exit" class="fnname">exit</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><div class="docblock"><p>Records that a span has been exited.</p> |
| <p>When exiting a span, this method is called to notify the subscriber |
| that the span has been exited. The subscriber is provided with the |
| <a href="span/struct.Id.html">span ID</a> of the exited span, and should update any internal state |
| tracking the current span accordingly.</p> |
| <p>Exiting a span does not imply that the span will not be re-entered.</p> |
| </div></details></div><h2 id="provided-methods" class="small-section-header">Provided Methods<a href="#provided-methods" class="anchor"></a></h2><div class="methods"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.on_register_dispatch" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#103">source</a><h4 class="code-header">fn <a href="#method.on_register_dispatch" class="fnname">on_register_dispatch</a>(&self, subscriber: &<a class="struct" href="struct.Dispatch.html" title="struct tracing::Dispatch">Dispatch</a>)</h4></section></summary><div class="docblock"><p>Invoked when this subscriber becomes a <a href="struct.Dispatch.html" title="Dispatch"><code>Dispatch</code></a>.</p> |
| <h6 id="avoiding-memory-leaks"><a href="#avoiding-memory-leaks">Avoiding Memory Leaks</a></h6> |
| <p><code>Subscriber</code>s should not store their own <a href="struct.Dispatch.html" title="Dispatch"><code>Dispatch</code></a>. Because the |
| <code>Dispatch</code> owns the <code>Subscriber</code>, storing the <code>Dispatch</code> within the |
| <code>Subscriber</code> will create a reference count cycle, preventing the <code>Dispatch</code> |
| from ever being dropped.</p> |
| <p>Instead, when it is necessary to store a cyclical reference to the |
| <code>Dispatch</code> within a <code>Subscriber</code>, use <a href="struct.Dispatch.html#method.downgrade" title="Dispatch::downgrade"><code>Dispatch::downgrade</code></a> to convert a |
| <code>Dispatch</code> into a <a href="dispatcher/struct.WeakDispatch.html"><code>WeakDispatch</code></a>. This type is analogous to |
| [<code>std::sync::Weak</code>], and does not create a reference count cycle. A |
| <a href="dispatcher/struct.WeakDispatch.html"><code>WeakDispatch</code></a> can be stored within a <code>Subscriber</code> without causing a |
| memory leak, and can be <a href="dispatcher/struct.WeakDispatch.html#method.upgrade">upgraded</a> into a <code>Dispatch</code> temporarily when |
| the <code>Dispatch</code> must be accessed by the <code>Subscriber</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.register_callsite" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#178">source</a><h4 class="code-header">fn <a href="#method.register_callsite" class="fnname">register_callsite</a>(&self, metadata: &'static <a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'static>) -> <a class="struct" href="subscriber/struct.Interest.html" title="struct tracing::subscriber::Interest">Interest</a></h4></section></summary><div class="docblock"><p>Registers a new <a href="../tracing_core/callsite/index.html">callsite</a> with this subscriber, returning whether or not |
| the subscriber is interested in being notified about the callsite.</p> |
| <p>By default, this function assumes that the subscriber’s <a href="trait.Subscriber.html#tymethod.enabled">filter</a> |
| represents an unchanging view of its interest in the callsite. However, |
| if this is not the case, subscribers may override this function to |
| indicate different interests, or to implement behaviour that should run |
| once for every callsite.</p> |
| <p>This function is guaranteed to be called at least once per callsite on |
| every active subscriber. The subscriber may store the keys to fields it |
| cares about in order to reduce the cost of accessing fields by name, |
| preallocate storage for that callsite, or perform any other actions it |
| wishes to perform once for each callsite.</p> |
| <p>The subscriber should then return an <a href="subscriber/struct.Interest.html" title="Interest"><code>Interest</code></a>, indicating |
| whether it is interested in being notified about that callsite in the |
| future. This may be <code>Always</code> indicating that the subscriber always |
| wishes to be notified about the callsite, and its filter need not be |
| re-evaluated; <code>Sometimes</code>, indicating that the subscriber may sometimes |
| care about the callsite but not always (such as when sampling), or |
| <code>Never</code>, indicating that the subscriber never wishes to be notified about |
| that callsite. If all active subscribers return <code>Never</code>, a callsite will |
| never be enabled unless a new subscriber expresses interest in it.</p> |
| <p><code>Subscriber</code>s which require their filters to be run every time an event |
| occurs or a span is entered/exited should return <code>Interest::sometimes</code>. |
| If a subscriber returns <code>Interest::sometimes</code>, then its <a href="trait.Subscriber.html#tymethod.enabled"><code>enabled</code></a> method |
| will be called every time an event or span is created from that callsite.</p> |
| <p>For example, suppose a sampling subscriber is implemented by |
| incrementing a counter every time <code>enabled</code> is called and only returning |
| <code>true</code> when the counter is divisible by a specified sampling rate. If |
| that subscriber returns <code>Interest::always</code> from <code>register_callsite</code>, then |
| the filter will not be re-evaluated once it has been applied to a given |
| set of metadata. Thus, the counter will not be incremented, and the span |
| or event that corresponds to the metadata will never be <code>enabled</code>.</p> |
| <p><code>Subscriber</code>s that need to change their filters occasionally should call |
| <a href="../tracing_core/callsite/fn.rebuild_interest_cache.html"><code>rebuild_interest_cache</code></a> to re-evaluate <code>register_callsite</code> for all |
| callsites.</p> |
| <p>Similarly, if a <code>Subscriber</code> has a filtering strategy that can be |
| changed dynamically at runtime, it would need to re-evaluate that filter |
| if the cached results have changed.</p> |
| <p>A subscriber which manages fanout to multiple other subscribers |
| should proxy this decision to all of its child subscribers, |
| returning <code>Interest::never</code> only if <em>all</em> such children return |
| <code>Interest::never</code>. If the set of subscribers to which spans are |
| broadcast may change dynamically, the subscriber should also never |
| return <code>Interest::Never</code>, as a new subscriber may be added that <em>is</em> |
| interested.</p> |
| <p>See the <a href="../tracing_core/callsite/index.html#registering-callsites">documentation on the callsite registry</a> for more |
| details on how and when the <code>register_callsite</code> method is called.</p> |
| <h5 id="notes"><a href="#notes">Notes</a></h5> |
| <p>This function may be called again when a new subscriber is created or |
| when the registry is invalidated.</p> |
| <p>If a subscriber returns <code>Interest::never</code> for a particular callsite, it |
| <em>may</em> still see spans and events originating from that callsite, if |
| another subscriber expressed interest in it.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.max_level_hint" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#230">source</a><h4 class="code-header">fn <a href="#method.max_level_hint" class="fnname">max_level_hint</a>(&self) -> Option<<a class="struct" href="level_filters/struct.LevelFilter.html" title="struct tracing::level_filters::LevelFilter">LevelFilter</a>></h4></section></summary><div class="docblock"><p>Returns the highest <a href="struct.Level.html">verbosity level</a> that this <code>Subscriber</code> will |
| enable, or <code>None</code>, if the subscriber does not implement level-based |
| filtering or chooses not to implement this method.</p> |
| <p>If this method returns a <a href="struct.Level.html"><code>Level</code></a>, it will be used as a hint to |
| determine the most verbose level that will be enabled. This will allow |
| spans and events which are more verbose than that level to be skipped |
| more efficiently. Subscribers which perform filtering are strongly |
| encouraged to provide an implementation of this method.</p> |
| <p>If the maximum level the subscriber will enable can change over the |
| course of its lifetime, it is free to return a different value from |
| multiple invocations of this method. However, note that changes in the |
| maximum level will <strong>only</strong> be reflected after the callsite <a href="subscriber/struct.Interest.html" title="Interest"><code>Interest</code></a> |
| cache is rebuilt, by calling the <a href="../tracing_core/callsite/fn.rebuild_interest_cache.html"><code>callsite::rebuild_interest_cache</code></a> |
| function. Therefore, if the subscriber will change the value returned by |
| this method, it is responsible for ensuring that |
| <a href="../tracing_core/callsite/fn.rebuild_interest_cache.html"><code>rebuild_interest_cache</code></a> is called after the value of the max |
| level changes.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.event_enabled" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#326">source</a><h4 class="code-header">fn <a href="#method.event_enabled" class="fnname">event_enabled</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>) -> bool</h4></section></summary><div class="docblock"><p>Determine if an <a href="event/struct.Event.html" title="Event"><code>Event</code></a> should be recorded.</p> |
| <p>By default, this returns <code>true</code> and <code>Subscriber</code>s can filter events in |
| <a href="trait.Subscriber.html#tymethod.event" title="Self::event"><code>event</code></a> without any penalty. However, when <code>event</code> is |
| more complicated, this can be used to determine if <code>event</code> should be |
| called at all, separating out the decision from the processing.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.clone_span" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#393">source</a><h4 class="code-header">fn <a href="#method.clone_span" class="fnname">clone_span</a>(&self, id: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section></summary><div class="docblock"><p>Notifies the subscriber that a <a href="span/struct.Id.html">span ID</a> has been cloned.</p> |
| <p>This function is guaranteed to only be called with span IDs that were |
| returned by this subscriber’s <code>new_span</code> function.</p> |
| <p>Note that the default implementation of this function this is just the |
| identity function, passing through the identifier. However, it can be |
| used in conjunction with <a href="trait.Subscriber.html#method.try_close"><code>try_close</code></a> to track the number of handles |
| capable of <code>enter</code>ing a span. When all the handles have been dropped |
| (i.e., <code>try_close</code> has been called one more time than <code>clone_span</code> for a |
| given ID), the subscriber may assume that the span will not be entered |
| again. It is then free to deallocate storage for data associated with |
| that span, write data from that span to IO, and so on.</p> |
| <p>For more unsafe situations, however, if <code>id</code> is itself a pointer of some |
| kind this can be used as a hook to “clone” the pointer, depending on |
| what that means for the specified pointer.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.drop_span" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#407">source</a><h4 class="code-header">fn <a href="#method.drop_span" class="fnname">drop_span</a>(&self, _id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.1.2: use <code>Subscriber::try_close</code> instead</span></div></span><div class="docblock"><p><strong>This method is deprecated.</strong></p> |
| <p>Using <code>drop_span</code> may result in subscribers composed using |
| <code>tracing-subscriber</code> crate’s <code>Layer</code> trait from observing close events. |
| Use <a href="trait.Subscriber.html#method.try_close"><code>try_close</code></a> instead.</p> |
| <p>The default implementation of this function does nothing.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.try_close" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#445">source</a><h4 class="code-header">fn <a href="#method.try_close" class="fnname">try_close</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> bool</h4></section></summary><div class="docblock"><p>Notifies the subscriber that a <a href="span/struct.Id.html">span ID</a> has been dropped, and returns |
| <code>true</code> if there are now 0 IDs that refer to that span.</p> |
| <p>Higher-level libraries providing functionality for composing multiple |
| subscriber implementations may use this return value to notify any |
| “layered” subscribers that this subscriber considers the span closed.</p> |
| <p>The default implementation of this method calls the subscriber’s |
| <a href="trait.Subscriber.html#method.drop_span"><code>drop_span</code></a> method and returns <code>false</code>. This means that, unless the |
| subscriber overrides the default implementation, close notifications |
| will never be sent to any layered subscribers. In general, if the |
| subscriber tracks reference counts, this method should be implemented, |
| rather than <code>drop_span</code>.</p> |
| <p>This function is guaranteed to only be called with span IDs that were |
| returned by this subscriber’s <code>new_span</code> function.</p> |
| <p>It’s guaranteed that if this function has been called once more than the |
| number of times <code>clone_span</code> was called with the same <code>id</code>, then no more |
| handles that can enter the span with that <code>id</code> exist. This means that it |
| can be used in conjunction with <a href="trait.Subscriber.html#method.clone_span"><code>clone_span</code></a> to track the number of |
| handles capable of <code>enter</code>ing a span. When all the handles have been |
| dropped (i.e., <code>try_close</code> has been called one more time than |
| <code>clone_span</code> for a given ID), the subscriber may assume that the span |
| will not be entered again, and should return <code>true</code>. It is then free to |
| deallocate storage for data associated with that span, write data from |
| that span to IO, and so on.</p> |
| <p><strong>Note</strong>: since this function is called when spans are dropped, |
| implementations should ensure that they are unwind-safe. Panicking from |
| inside of a <code>try_close</code> function may cause a double panic, if the span |
| was dropped due to a thread unwinding.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.current_span" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#464">source</a><h4 class="code-header">fn <a href="#method.current_span" class="fnname">current_span</a>(&self) -> <a class="struct" href="../tracing_core/span/struct.Current.html" title="struct tracing_core::span::Current">Current</a></h4></section></summary><div class="docblock"><p>Returns a type representing this subscriber’s view of the current span.</p> |
| <p>If subscribers track a current span, they should override this function |
| to return <a href="../tracing_core/span/struct.Current.html#tymethod.new"><code>Current::new</code></a> if the thread from which this method is |
| called is inside a span, or <a href="../tracing_core/span/struct.Current.html#tymethod.none"><code>Current::none</code></a> if the thread is not |
| inside a span.</p> |
| <p>By default, this returns a value indicating that the subscriber |
| does <strong>not</strong> track what span is current. If the subscriber does not |
| implement a current span, it should not override this method.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.downcast_raw" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#495">source</a><h4 class="code-header">unsafe fn <a href="#method.downcast_raw" class="fnname">downcast_raw</a>(&self, id: TypeId) -> Option<*const ()></h4></section></summary><div class="docblock"><p>If <code>self</code> is the same type as the provided <code>TypeId</code>, returns an untyped |
| <code>*const</code> pointer to that type. Otherwise, returns <code>None</code>.</p> |
| <p>If you wish to downcast a <code>Subscriber</code>, it is strongly advised to use |
| the safe API provided by <a href="#method.downcast_ref"><code>downcast_ref</code></a> instead.</p> |
| <p>This API is required for <code>downcast_raw</code> to be a trait method; a method |
| signature like <a href="#method.downcast_ref"><code>downcast_ref</code></a> (with a generic type parameter) is not |
| object-safe, and thus cannot be a trait method for <code>Subscriber</code>. This |
| means that if we only exposed <code>downcast_ref</code>, <code>Subscriber</code> |
| implementations could not override the downcasting behavior</p> |
| <p>This method may be overridden by “fan out” or “chained” subscriber |
| implementations which consist of multiple composed types. Such |
| subscribers might allow <code>downcast_raw</code> by returning references to those |
| component if they contain components with the given <code>TypeId</code>.</p> |
| <h5 id="safety"><a href="#safety">Safety</a></h5> |
| <p>The <a href="#method.downcast_ref"><code>downcast_ref</code></a> method expects that the pointer returned by |
| <code>downcast_raw</code> is non-null and points to a valid instance of the type |
| with the provided <code>TypeId</code>. Failure to ensure this will result in |
| undefined behaviour, so implementing <code>downcast_raw</code> is unsafe.</p> |
| </div></details></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor"></a></h2><div id="implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-dyn%20Subscriber%20+%20%27static" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#504">source</a><a href="#impl-dyn%20Subscriber%20+%20%27static" class="anchor"></a><h3 class="code-header">impl dyn <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + 'static</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#506">source</a><h4 class="code-header">pub fn <a href="#method.is" class="fnname">is</a><T>(&self) -> bool<span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this <code>Subscriber</code> is the same type as <code>T</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.downcast_ref" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#512">source</a><h4 class="code-header">pub fn <a href="#method.downcast_ref" class="fnname">downcast_ref</a><T>(&self) -> Option<&T><span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns some reference to this <code>Subscriber</code> value if it is of type <code>T</code>, |
| or <code>None</code> if it isn’t.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-dyn%20Subscriber%20+%20Send%20+%20%27static" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#524">source</a><a href="#impl-dyn%20Subscriber%20+%20Send%20+%20%27static" class="anchor"></a><h3 class="code-header">impl dyn <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + Send + 'static</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is-1" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#526">source</a><h4 class="code-header">pub fn <a href="#method.is-1" class="fnname">is</a><T>(&self) -> bool<span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this <a href="trait.Subscriber.html" title="Subscriber"><code>Subscriber</code></a> is the same type as <code>T</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.downcast_ref-1" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#532">source</a><h4 class="code-header">pub fn <a href="#method.downcast_ref-1" class="fnname">downcast_ref</a><T>(&self) -> Option<&T><span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns some reference to this <a href="trait.Subscriber.html" title="Subscriber"><code>Subscriber</code></a> value if it is of type <code>T</code>, |
| or <code>None</code> if it isn’t.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-dyn%20Subscriber%20+%20Sync%20+%20%27static" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#544">source</a><a href="#impl-dyn%20Subscriber%20+%20Sync%20+%20%27static" class="anchor"></a><h3 class="code-header">impl dyn <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + Sync + 'static</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is-2" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#546">source</a><h4 class="code-header">pub fn <a href="#method.is-2" class="fnname">is</a><T>(&self) -> bool<span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this <a href="trait.Subscriber.html" title="Subscriber"><code>Subscriber</code></a> is the same type as <code>T</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.downcast_ref-2" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#552">source</a><h4 class="code-header">pub fn <a href="#method.downcast_ref-2" class="fnname">downcast_ref</a><T>(&self) -> Option<&T><span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns some reference to this <code>[</code>Subscriber<code>] value if it is of type </code>T<code>, or </code>None` if it isn’t.</p> |
| </div></details></div></details><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-dyn%20Subscriber%20+%20Sync%20+%20Send%20+%20%27static" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#564">source</a><a href="#impl-dyn%20Subscriber%20+%20Sync%20+%20Send%20+%20%27static" class="anchor"></a><h3 class="code-header">impl dyn <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + Sync + Send + 'static</h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.is-3" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#566">source</a><h4 class="code-header">pub fn <a href="#method.is-3" class="fnname">is</a><T>(&self) -> bool<span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns <code>true</code> if this <a href="trait.Subscriber.html" title="Subscriber"><code>Subscriber</code></a> is the same type as <code>T</code>.</p> |
| </div></details><details class="rustdoc-toggle method-toggle" open><summary><section id="method.downcast_ref-3" class="method has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#572">source</a><h4 class="code-header">pub fn <a href="#method.downcast_ref-3" class="fnname">downcast_ref</a><T>(&self) -> Option<&T><span class="where fmt-newline">where<br> T: Any,</span></h4></section></summary><div class="docblock"><p>Returns some reference to this <a href="trait.Subscriber.html" title="Subscriber"><code>Subscriber</code></a> value if it is of type <code>T</code>, |
| or <code>None</code> if it isn’t.</p> |
| </div></details></div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor"></a></h2><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Subscriber-for-Box%3CS%2C%20Global%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#710">source</a><a href="#impl-Subscriber-for-Box%3CS%2C%20Global%3E" class="anchor"></a><h3 class="code-header">impl<S> <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> for Box<S, Global><span class="where fmt-newline">where<br> S: <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + ?Sized,</span></h3></section></summary><div class="impl-items"><section id="method.register_callsite-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#715">source</a><a href="#method.register_callsite-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.register_callsite" class="fnname">register_callsite</a>(&self, metadata: &'static <a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'static>) -> <a class="struct" href="subscriber/struct.Interest.html" title="struct tracing::subscriber::Interest">Interest</a></h4></section><section id="method.enabled" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#720">source</a><a href="#method.enabled" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.enabled" class="fnname">enabled</a>(&self, metadata: &<a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'_>) -> bool</h4></section><section id="method.max_level_hint-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#725">source</a><a href="#method.max_level_hint-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.max_level_hint" class="fnname">max_level_hint</a>(&self) -> Option<<a class="struct" href="level_filters/struct.LevelFilter.html" title="struct tracing::level_filters::LevelFilter">LevelFilter</a>></h4></section><section id="method.new_span" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#730">source</a><a href="#method.new_span" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.new_span" class="fnname">new_span</a>(&self, span: &<a class="struct" href="span/struct.Attributes.html" title="struct tracing::span::Attributes">Attributes</a><'_>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section><section id="method.record" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#735">source</a><a href="#method.record" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.record" class="fnname">record</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, values: &<a class="struct" href="span/struct.Record.html" title="struct tracing::span::Record">Record</a><'_>)</h4></section><section id="method.record_follows_from" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#740">source</a><a href="#method.record_follows_from" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.record_follows_from" class="fnname">record_follows_from</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, follows: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.event_enabled-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#745">source</a><a href="#method.event_enabled-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.event_enabled" class="fnname">event_enabled</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>) -> bool</h4></section><section id="method.event" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#750">source</a><a href="#method.event" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.event" class="fnname">event</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>)</h4></section><section id="method.enter" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#755">source</a><a href="#method.enter" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.enter" class="fnname">enter</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.exit" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#760">source</a><a href="#method.exit" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.exit" class="fnname">exit</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.clone_span-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#765">source</a><a href="#method.clone_span-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.clone_span" class="fnname">clone_span</a>(&self, id: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section><section id="method.try_close-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#770">source</a><a href="#method.try_close-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.try_close" class="fnname">try_close</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> bool</h4></section><details class="rustdoc-toggle method-toggle" open><summary><section id="method.drop_span-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#776">source</a><a href="#method.drop_span-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.drop_span" class="fnname">drop_span</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.1.2: use <code>Subscriber::try_close</code> instead</span></div></span></details><section id="method.current_span-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#781">source</a><a href="#method.current_span-1" class="anchor"></a><h4 class="code-header">fn <a href="#method.current_span" class="fnname">current_span</a>(&self) -> <a class="struct" href="../tracing_core/span/struct.Current.html" title="struct tracing_core::span::Current">Current</a></h4></section><section id="method.downcast_raw-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#786">source</a><a href="#method.downcast_raw-1" class="anchor"></a><h4 class="code-header">unsafe fn <a href="#method.downcast_raw" class="fnname">downcast_raw</a>(&self, id: TypeId) -> Option<*const ()></h4></section></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Subscriber-for-Arc%3CS%3E" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#795">source</a><a href="#impl-Subscriber-for-Arc%3CS%3E" class="anchor"></a><h3 class="code-header">impl<S> <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> for Arc<S><span class="where fmt-newline">where<br> S: <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> + ?Sized,</span></h3></section></summary><div class="impl-items"><section id="method.register_callsite-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#800">source</a><a href="#method.register_callsite-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.register_callsite" class="fnname">register_callsite</a>(&self, metadata: &'static <a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'static>) -> <a class="struct" href="subscriber/struct.Interest.html" title="struct tracing::subscriber::Interest">Interest</a></h4></section><section id="method.enabled-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#805">source</a><a href="#method.enabled-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.enabled" class="fnname">enabled</a>(&self, metadata: &<a class="struct" href="struct.Metadata.html" title="struct tracing::Metadata">Metadata</a><'_>) -> bool</h4></section><section id="method.max_level_hint-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#810">source</a><a href="#method.max_level_hint-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.max_level_hint" class="fnname">max_level_hint</a>(&self) -> Option<<a class="struct" href="level_filters/struct.LevelFilter.html" title="struct tracing::level_filters::LevelFilter">LevelFilter</a>></h4></section><section id="method.new_span-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#815">source</a><a href="#method.new_span-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.new_span" class="fnname">new_span</a>(&self, span: &<a class="struct" href="span/struct.Attributes.html" title="struct tracing::span::Attributes">Attributes</a><'_>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section><section id="method.record-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#820">source</a><a href="#method.record-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.record" class="fnname">record</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, values: &<a class="struct" href="span/struct.Record.html" title="struct tracing::span::Record">Record</a><'_>)</h4></section><section id="method.record_follows_from-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#825">source</a><a href="#method.record_follows_from-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.record_follows_from" class="fnname">record_follows_from</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>, follows: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.event_enabled-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#830">source</a><a href="#method.event_enabled-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.event_enabled" class="fnname">event_enabled</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>) -> bool</h4></section><section id="method.event-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#835">source</a><a href="#method.event-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.event" class="fnname">event</a>(&self, event: &<a class="struct" href="event/struct.Event.html" title="struct tracing::event::Event">Event</a><'_>)</h4></section><section id="method.enter-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#840">source</a><a href="#method.enter-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.enter" class="fnname">enter</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.exit-1" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#845">source</a><a href="#method.exit-1" class="anchor"></a><h4 class="code-header">fn <a href="#tymethod.exit" class="fnname">exit</a>(&self, span: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section><section id="method.clone_span-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#850">source</a><a href="#method.clone_span-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.clone_span" class="fnname">clone_span</a>(&self, id: &<a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a></h4></section><section id="method.try_close-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#855">source</a><a href="#method.try_close-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.try_close" class="fnname">try_close</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>) -> bool</h4></section><details class="rustdoc-toggle method-toggle" open><summary><section id="method.drop_span-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#861">source</a><a href="#method.drop_span-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.drop_span" class="fnname">drop_span</a>(&self, id: <a class="struct" href="span/struct.Id.html" title="struct tracing::span::Id">Id</a>)</h4></section></summary><span class="item-info"><div class="stab deprecated"><span class="emoji">👎</span><span>Deprecated since 0.1.2: use <code>Subscriber::try_close</code> instead</span></div></span></details><section id="method.current_span-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#866">source</a><a href="#method.current_span-2" class="anchor"></a><h4 class="code-header">fn <a href="#method.current_span" class="fnname">current_span</a>(&self) -> <a class="struct" href="../tracing_core/span/struct.Current.html" title="struct tracing_core::span::Current">Current</a></h4></section><section id="method.downcast_raw-2" class="method trait-impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#871">source</a><a href="#method.downcast_raw-2" class="anchor"></a><h4 class="code-header">unsafe fn <a href="#method.downcast_raw" class="fnname">downcast_raw</a>(&self, id: TypeId) -> Option<*const ()></h4></section></div></details><h2 id="implementors" class="small-section-header">Implementors<a href="#implementors" class="anchor"></a></h2><div id="implementors-list"><section id="impl-Subscriber-for-NoSubscriber" class="impl has-srclink"><a class="srclink rightside" href="../src/tracing_core/subscriber.rs.html#677">source</a><a href="#impl-Subscriber-for-NoSubscriber" class="anchor"></a><h3 class="code-header">impl <a class="trait" href="trait.Subscriber.html" title="trait tracing::Subscriber">Subscriber</a> for <a class="struct" href="subscriber/struct.NoSubscriber.html" title="struct tracing::subscriber::NoSubscriber">NoSubscriber</a></h3></section></div><script src="../implementors/tracing_core/subscriber/trait.Subscriber.js" data-ignore-extern-crates="alloc,tracing_core" async></script></section></div></main><div id="rustdoc-vars" data-root-path="../" data-current-crate="tracing" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html> |