This release fixes a few issues related to feature flagging.
This is a breaking release of tracing-subscriber
. The primary breaking change in this release is the removal of the dependency on the chrono
crate, due to RUSTSEC-2020-0159. To replace chrono
, support is added for formatting timestamps using the time
crate instead.
In addition, this release includes a number of other breaking API changes, such as adding (limited) support for #![no_std]
targets, removing previously deprecated APIs, and more.
Layer::new_span
to Layer::on_new_span
(#1674)Layer
impl for Arc<L: Layer<S>>
and Arc<dyn Layer<S> + ...>
(#1649)chrono
crate with the time
crate for timestamp formatting, to resolve RUSTSEC-2020-0159 (#1646)json
and env-filter
from default features. They must now be enabled explictly (#1647)FormatEvent::format_event
and FormatFields::format_fields
trait methods to take a Writer
type, rather than a &mut dyn fmt::Write
trait object (#1661)MakeWriter
trait by adding a lifetime parameter (#781)Layer::new_span
to Layer::on_new_span
(#1674)FormatEvent::format_event
and FormatFields::format_fields
trait methods to take a Writer
type, rather than a &mut dyn fmt::Write
trait object (#1661)json
and env-filter
feature flags are no longer enabled by default (#1647)CurrentSpan
type (#1320)SpanRef::parents
iterator, replaced by SpanRef::scope
in #1431 ([#1648)])Context::scope
iterator, replaced by Context::span_scope
and Context::event_scope
in #1431 and #1434 ([#1648)])Layer
impl for Arc<L: Layer<S>>
and Arc<dyn Layer<S> + ...>
. These interfere with per-layer filtering. (#1649)LayerBuilder
type (#1673)fmt::Layer::on_event
(renamed to fmt::Layer::fmt_event
) (#1673)chrono
feature flag and APIs for using the chrono
crate for timestamp formatting (#1646)LocalTime
and UtcTime
types for formatting timestamps using the time
crate (#1646)MakeWriter
trait, allowing it to return a borrowed writer. This enables implementations of MakeWriter
for types such as Mutex<T: io::Write>
and std::fs::File
. (#781)#![no_std]
targets, by disabling the std
feature flag (#1660)Thanks to @Folyd and @nmathewson for contributing to this release!
This release fixes an issue where a Layer
implementation's custom downcast_raw
implementation was lost when wrapping that layer with a per-layer filter.
Filtered::downcast_raw
to wrapped Layer
(#1619)Thanks to @bryanburgers for contributing to this release!
This release contains a number of bug fixes, including a fix for tracing-subscriber
failing to compile on the minimum supported Rust version of 1.42.0. It also adds IntoIterator
implementations for the Targets
type.
enabled
state is cleared when a global filter short-circuits filter evaluation (#1575)Layer::on_layer
not being called for Box
ed Layer
s, which broke per-layer filtering (#1576)Targets::iter
, returning an iterator over the set of target-level pairs enabled by a Targets
filter (#1574)IntoIterator
implementations for Targets
and &Targets
(#1574)Thanks to new contributor @connec for contributing to this release!
This release fixes a few bugs in the per-layer filtering API added in v0.2.21.
EnvFilter
memory use (#1568)This fixes a regression where the filter::ParseError
type was accidentally renamed.
filter::ParseError
accidentally being renamed to filter::DirectiveParseError
(#1558)This release introduces the Filter
trait, a new API for per-layer filtering. This allows controlling which spans and events are recorded by various layers individually, rather than globally.
In addition, it adds a new Targets
filter, which provides a lighter-weight version of the filtering provided by EnvFilter
, as well as other smaller API improvements and fixes.
SpanRef::parent_id
, which cannot properly support per-layer filtering. Use .parent().map(SpanRef::id)
instead. (#1523)Context
methods that are provided when the Subscriber
implements LookupSpan
no longer require the “registry” feature flag (#1525)fmt::Debug
implementation for Layered
no longer requires the S
type parameter to implement Debug
(#1528)Filter
trait, Filtered
type, Layer::with_filter
method, and other APIs for per-layer filtering (#1523)FilterFn
and DynFilterFn
types that implement global (Layer
) and per-layer (Filter
) filtering for closures and function pointers (#1523)Targets
filter, which implements a lighter-weight form of EnvFilter
-like filtering (#1550)Layer::on_layer
callback, called when layering the Layer
onto a Subscriber
(#1523)Layer
implementations for Box<L>
and Arc<L>
where L: Layer
([#1536])Layer
implementations for Box<dyn Layer<S> + Send + Sync + 'static>
and Arc<dyn Layer<S> + Send + Sync + 'static>
([#1536])Special thanks to new contributors @jsgf and @maxburke for contributing to this release!
fmt
printing only the first source
for errors with a chain of sources (#1460)Pretty
formatter (#1498)Json
formatter not honoring without_time
and with_level
configurations (#1463)Thanks to new contributors @joshtriplett and @lerouxrgd, and returning contributor @teozkr, for contributing to this release!
SpanRef::parents
, SpanRef::from_root
, and Context::scope
iterators, which are replaced by new SpanRef::scope
and Scope::from_root
iterators (#1413)SpanRef::scope
method, which returns a leaf-to-root Iterator
including the leaf span (#1413)Scope::from_root
method, which reverses the scope
iterator to iterate root-to-leaf (#1413)Context::event_span
method, which looks up the parent span of an event (#1434)Context::event_scope
method, returning a Scope
iterator over the span scope of an event (#1434)MakeWriter::make_writer_for
method, which allows returning a different writer based on a span or event's metadata (#1141)MakeWriterExt
trait, with with_max_level
, with_min_level
, with_filter
, and
, and or_else
combinators (#1274)MakeWriter
implementation for Arc<W> where &W: io::Write
(#1274)Thanks to @teozkr and @Folyd for contributing to this release!
CurrentSpan
type, which is inefficient and largely superseded by the registry
API (#1321){
and ]
(#1368)Thanks to @Folyd, and new contributors @akinnane and @aym-v for contributing to this release!
Pretty
formatter now honors with_ansi(false)
to disable ANSI terminal formatting (#1240)Pretty
formatter (#1275)ChronoLocal
time formatter (#1103)FmtContext::current_span()
method, returning the current span (#1290)FmtSpan
variants may now be combined using the |
operator for more granular control over what span events are generated (#1277)Thanks to new contributors @cratelyn, @dignati, and @zicklag, as well as @Folyd, @matklad, and @najamelan, for contributing to this release!
Info
) failing to parse (#1126)fmt::Subscriber
not providing a max-level hint (#1251)tracing-subscriber
no longer enables tracing
and tracing-core
's default features (#1144)chrono
dependency to 0.4.16 (#1189)tracing-log
dependency to 0.1.2Thanks to @salewski, @taiki-e, @davidpdrsn and @markdingram for contributing to this release!
FormatFields
impl for FmtContext
(#1082)format::Pretty
, an aesthetically pleasing, human-readable event formatter for local development and user-facing CLIs (#1080)FmtContext::field_format
, which returns the subscriber's field formatter (#1082)Registry::new
allocating an excessively large amount of memory, most of which would never be used (#1064)new_span
performance by reusing HashMap
allocations for Extensions
(#1064)Registry::enter
and Registry::exit
(#1058)tracing-core
to 0.1.17 (#992)EnvFilter
that contains directives that would enable a level disabled by the tracing
crate's static_max_level
features (#1021)Thanks to @jyn514 and @bkchr for contributing to this release!
Option<Level>
lost its Into<LevelFilter>
impl (#966)EnvFilter
enabling spans that should not be enabled when multiple subscribers are in use (#927)format::Json
now outputs fields in a more readable order (#892)tracing-core
dependency to 0.1.16BoxMakeWriter
for erasing the type of a MakeWriter
implementation (#958)TestWriter
MakeWriter
implementation to support libtest output capturing (#938)Layer
impl for Option<T> where T: Layer
(#910)From<Level>
impl for Directive
(#918)Thanks to @Pothulapati, @samrg472, @bryanburgers, @keetonian, and @SriRamanujam for contributing to this release!
regex
dependency enables fewer unused feature flags (#899)Thanks to @bdonlan and @jeromegn for contributing to this release!
LevelFilter
is now a re-export of the tracing_core::LevelFilter
type, it can now be used interchangably with the versions in tracing
and tracing-core
(#853)LevelFilter
s and Level
s (#853)tracing-core
dependency to 0.1.12 (#853)LevelFilter
and EnvFilter
now participate in tracing-core
's max level hinting, improving performance significantly in some use cases where levels are disabled globally (#853)chrono
feature is disabled (#844)layer::Context
are now also provided by FmtContext
(#834)chrono
dependency is enabled, the SystemTime
timestamp formatter now emits human-readable timestamps rather than using SystemTime
's fmt::Debug
implementation (chrono
is still required for customized timestamp formatting) (#807)ansi_term
dependency to 0.12 (#816)with_span_list
method to configure the JSON formatter to include a list of all spans in the current trace in formatting events (similarly to the text formatter) (#741)with_current_span
method to configure the JSON formatter to include a field for the current span (the leaf of the trace) in formatted events (#741)with_thread_names
and with_thread_ids
methods to configure fmt::Subscriber
s and fmt::Layer
s to include the thread name and/or thread ID of the current thread when formatting events (#818)Thanks to new contributors @mockersf, @keetonian, and @Pothulapati for contributing to this release!
parking_lot
dependency to accept the latest parking_lot
version (#774)Thanks to @rkuhn, @greenwoodcm, and @Ralith for contributing to this release!
Span::record
would result in malformed spans (#709)ChronoUtc
format_time
(#677)This release includes several API ergonomics improvements, including shorthand constructors for many types, and an extension trait for initializing subscribers using method-chaining style. Additionally, several bugs in less commonly used fmt
APIs were fixed.
fmt
(including tracing_subscriber::fmt()
to return a SubscriberBuilder
, tracing_subscriber::fmt::layer()
to return a format Layer
, etc) (#660)tracing_subscriber::registry()
to construct a new registry (#660)SubscriberInitExt
extension trait for more ergonomic subscriber initialization (#660)LayerBuilder
methods to Layer
(#655)LayerBuilder
, as Layer
now implements all builder methods (#655)Compact
formatter not omitting levels with with_level(false)
(#657)fmt::Layer
duplicating the fields for a new span if another layer has already formatted its fields (#634)record
to add new fields to a span that already has fields (#659)flatten_event
to SubscriberBuilder
(#599)with_level
to SubscriberBuilder
(#594)EnvFilter
directive selection now behaves correctly (i.e. like env_logger
) (#583)EnvFilter
incorrectly allowing less-specific filter directives to enable events that are disabled by more-specific filters (#583)EnvFilter
performance improvements, especially when filtering events generated by log
records (#578, #583)BTreeMap
with Vec
in DirectiveSet
, improving iteration performance significantly with typical numbers of filter directives (#580)A big thank-you to @samschlegel for lots of help with EnvFilter
performance tuning in this release!
Context
to FmtContext
(#420, #425)Builder
to SubscriberBuilder
(#420)Filter
. Use EnvFilter
instead (#434)Registry
, a Subscriber
implementation that Layer
s can use as a high-performance, in-memory span store. (#420, #425, #432, #433, #435)LookupSpan
trait, implemented by Subscriber
s to expose stored span data to Layer
s (#420)fmt::Layer
, to allow composing log formatting with other Layer
sContext
to FmtContext
(#420, #425) (BREAKING)Builder
to SubscriberBuilder
(#420) (BREAKING)fmt::Subscriber
in terms of the Registry
and Layer
s (#420)Filter
. Use EnvFilter
instead (#434) (BREAKING)fmt::SubscriberBuilder::init
not setting up log
compatibility (#489)Layered
subscribers failing to downcast to their own type (#549)Layer::downcast_ref
returning invalid references (#454){}
printed after spans with no fields (f079f2d)smallvec
dependency to 0.1 (#543)Layered
subscribers failing to downcast to their own type (#549)FormattedFields
extensions from the same formatter type (1c3bb70)fmt::Layer::on_record
inserting a new FormattedFields
when formatted fields for a span already exist (1c3bb70)dbg!
macros (#533)FormattedFields::new
constructor (#478)fmt::Layer
documentation (#510)with_target(false)
(#481)fmt::SubscriberBuilder::init
not setting up log
compatibility (#489)no-default-features
(#499, #500)LookupSpans
implementation for Layered
(#448)SpanRef::from_root
to iterate over a span's parents from the root (#460)Context::scope
, to iterate over the current context from the root (#460)Context::lookup_current
, which returns a SpanRef
to the current span's data (#460)Context
methods to be less restrictive (#460)Layer::downcast_ref
returning invalid references (#454)Registry
, a reusable span store that Layer
s can use a high-performance, in-memory store. (#420, #425, #432, #433, #435)fmt::Subscriber
in terms of the Registry
and Layer
s (#420)fmt::format::FormatFields
and fmt::format::FormatEvent
to accept a mandatory FmtContext
. These FormatFields
and FormatEvent
will likely see additional breaking changes in subsequent alpha. (#420, #425)Filter
. Use EnvFilter
instead (#434)Thanks to all the contributers to this release!
init
and try_init
functions to FmtSubscriber
(#385)ChronoUtc
and ChronoLocal
timers, RFC 3339 support (#387)tracing::subscriber::set_default
which sets the default subscriber and returns a drop guard. This drop guard will reset the dispatch on drop (#388).EnvFilter
. Setting RUST_LOG=target
previously only the ERROR
level, while it should enable everything. tracing-subscriber
now defaults to TRACE
if no level is specified (#401)tracing-log
feature flag for init + try_init. The feature flag tracing_log
was used instead of the correct tracing-log
. As a result, both tracing-log
and tracing_log
needed to be specified in order to initialize the global logger. Only tracing-log
needs to be specified now (#400).Thanks to all the contributers to this release!
FmtSubscriber::current_span
is used (#371)with_ansi(false)
on FmtSubscriber
not disabling ANSI color formatting for timestamps (#354)FmtSubscriber
that could cause spans to not be closed when all references are dropped (#366)Layered
subscribers not properly forwarding calls to current_span
(#350)EnvFilter
ignoring directives with targets that are the same number of characters (#333)EnvFilter
failing to properly apply filter directives to events generated from log
records bytracing-log
(#344)Filter
to EnvFilter
, deprecated Filter
(#339)FmtSubscriber
now defaults to enabling only the INFO
level and above when a max level filter or EnvFilter
is not set (#336)parking_lot
dependency an opt-in feature flag (#348)EnvFilter::add_directive
to add new directives to filters after they are constructed (#334)fmt::Builder::with_max_level
to set a global level filter for a FmtSubscriber
without requiring the use of EnvFilter
(#336)Layer
implementation for LevelFilter
(#336)EnvFilter
now implements fmt::Display
(#329)crossbeam-util
(#348)CurrentSpan
(#325)