pub struct IndicatifLayer<S, F = DefaultFields> { /* private fields */ }
Expand description
The layer that handles creating and managing indicatif progress bars for active spans. This layer must be registered with your tracing subscriber to have any effect.
This layer performs no filtering on which spans to show progress bars for. It is expected one
attaches filters to this
layer
to control which spans actually have progress bars generated for them. See
filter::IndicatifFilter
for a rudimentary filter.
Progress bars will be started the very first time a span is entered or when one of its child spans is entered for the first time, and will finish when the span is closed (including all child spans having closed).
Progress bars are emitted to stderr.
Under the hood, this just uses indicatif’s MultiProgress
struct to
manage individual ProgressBar
instances per span.
Implementations§
Source§impl<S> IndicatifLayer<S>where
S: Subscriber + for<'a> LookupSpan<'a>,
impl<S> IndicatifLayer<S>where
S: Subscriber + for<'a> LookupSpan<'a>,
Sourcepub fn new() -> Self
pub fn new() -> Self
Spawns a progress bar for every tracing span that is received by this layer.
The default settings for this layer are 7 progress bars maximum and progress bars in the style of:
⠄ do_work{val=0}
⠄ do_work{val=1}
⠄ do_work{val=2}
↳ ⠴ do_sub_work{val=2}
↳ ⠴ do_sub_work{val=2}
⠄ do_work{val=3}
⠄ do_work{val=4}
...and 5 more not shown above.
Source§impl<S, F> IndicatifLayer<S, F>
impl<S, F> IndicatifLayer<S, F>
pub fn get_fmt_writer(&self) -> IndicatifWriter<Stderr> ⓘ
Sourcepub fn get_stderr_writer(&self) -> IndicatifWriter<Stderr> ⓘ
pub fn get_stderr_writer(&self) -> IndicatifWriter<Stderr> ⓘ
Returns the a writer for std::io::Stderr
that ensures its output will not be clobbered by
active progress bars.
Instead of eprintln!(...)
prefer writeln!(indicatif_layer.get_stderr_writer(), ...)
instead to ensure your output is not clobbered by active progress bars.
If one wishes tracing logs to be output to stderr, this should be passed into
fmt::Layer::with_writer
.
Sourcepub fn get_stdout_writer(&self) -> IndicatifWriter<Stdout> ⓘ
pub fn get_stdout_writer(&self) -> IndicatifWriter<Stdout> ⓘ
Returns the a writer for std::io::Stdout
that ensures its output will not be clobbered by
active progress bars.
Instead of println!(...)
prefer writeln!(indicatif_layer.get_stdout_writer(), ...)
instead to ensure your output is not clobbered by active progress bars.
If one wishes tracing logs to be output to stdout, this should be passed into
fmt::Layer::with_writer
.
Sourcepub fn with_span_field_formatter<F2>(
self,
formatter: F2,
) -> IndicatifLayer<S, F2>where
F2: for<'writer> FormatFields<'writer> + 'static,
pub fn with_span_field_formatter<F2>(
self,
formatter: F2,
) -> IndicatifLayer<S, F2>where
F2: for<'writer> FormatFields<'writer> + 'static,
Set the formatter for span fields, the result of which will be available as the
progress bar template key span_fields
.
The default is the DefaultFields
formatter.
Sourcepub fn with_progress_style(self, style: ProgressStyle) -> Self
pub fn with_progress_style(self, style: ProgressStyle) -> Self
Override the style used for displayed progress bars.
Two additional keys are available for the progress bar template:
span_fields
- the formatted string of this span’s fieldsspan_name
- the name of the spanspan_child_prefix
- a prefix that increase in size according to the number of parents the span has.
The default template is {span_child_prefix}{spinner} {span_name}{{{span_fields}}}
.
Sourcepub fn with_span_child_prefix_indent(self, indent: &'static str) -> Self
pub fn with_span_child_prefix_indent(self, indent: &'static str) -> Self
Set the indent used to mark the “level” of a given child span’s progress bar.
For example, if the given span is two levels deep (iow has two parent spans with progress
bars), and this is “ “, the {span_child_prefix}
key for this span’s progress bar will be
prefixed with “ “.
Sourcepub fn with_span_child_prefix_symbol(self, symbol: &'static str) -> Self
pub fn with_span_child_prefix_symbol(self, symbol: &'static str) -> Self
Set the symbol used to denote this is a progress bar from a child span.
This is ultimately concatenated with the child prefix indent to make the
span_child_prefix
progress bar key.
Sourcepub fn with_max_progress_bars(
self,
max_progress_bars: u64,
footer_style: Option<ProgressStyle>,
) -> Self
pub fn with_max_progress_bars( self, max_progress_bars: u64, footer_style: Option<ProgressStyle>, ) -> Self
Set the maximum number of progress bars that will be displayed, and the possible footer “progress bar” that displays when there are more progress bars than can be displayed.
footer_style
dictates the appearance of the footer, and the footer will only appear if
there are more progress bars than can be displayed. If it is None
, no footer will be
displayed. footer_style
has the following keys available to it:
pending_progress_bars
- the number of progress bars waiting to be shown
Sourcepub fn with_tick_settings(self, tick_settings: TickSettings) -> Self
pub fn with_tick_settings(self, tick_settings: TickSettings) -> Self
Configures how often progress bars are recalcuated and redrawn to the terminal.
Trait Implementations§
Source§impl<S> Default for IndicatifLayer<S>where
S: Subscriber + for<'a> LookupSpan<'a>,
impl<S> Default for IndicatifLayer<S>where
S: Subscriber + for<'a> LookupSpan<'a>,
Source§impl<S, F> Layer<S> for IndicatifLayer<S, F>
impl<S, F> Layer<S> for IndicatifLayer<S, F>
Source§fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
fn on_new_span(&self, attrs: &Attributes<'_>, id: &Id, ctx: Context<'_, S>)
Attributes
and Id
.Source§fn on_enter(&self, id: &Id, ctx: Context<'_, S>)
fn on_enter(&self, id: &Id, ctx: Context<'_, S>)
Source§fn on_close(&self, id: Id, ctx: Context<'_, S>)
fn on_close(&self, id: Id, ctx: Context<'_, S>)
Source§fn on_register_dispatch(&self, subscriber: &Dispatch)
fn on_register_dispatch(&self, subscriber: &Dispatch)
Subscriber
. Read moreSource§fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
fn register_callsite(&self, metadata: &'static Metadata<'static>) -> Interest
Subscriber::register_callsite
. Read moreSource§fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
fn enabled(&self, metadata: &Metadata<'_>, ctx: Context<'_, S>) -> bool
true
if this layer is interested in a span or event with the
given metadata
in the current Context
, similarly to
Subscriber::enabled
. Read moreSource§fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
fn on_record(&self, _span: &Id, _values: &Record<'_>, _ctx: Context<'_, S>)
Id
recorded the given
values
.Source§fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
fn on_follows_from(&self, _span: &Id, _follows: &Id, _ctx: Context<'_, S>)
span
recorded that it
follows from the span with the ID follows
.Source§fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>)
fn on_event(&self, _event: &Event<'_>, _ctx: Context<'_, S>)
Source§fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
fn on_exit(&self, _id: &Id, _ctx: Context<'_, S>)
Source§fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
fn on_id_change(&self, _old: &Id, _new: &Id, _ctx: Context<'_, S>)
Source§fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
fn and_then<L>(self, layer: L) -> Layered<L, Self, S>
Layer
, returning a Layered
struct implementing Layer
. Read moreSource§fn with_subscriber(self, inner: S) -> Layered<Self, S>where
Self: Sized,
fn with_subscriber(self, inner: S) -> Layered<Self, S>where
Self: Sized,
Layer
with the given Subscriber
, returning a
Layered
struct that implements Subscriber
. Read more