This release updates the tracing
dependency to v0.1.41 and
the tracing-serde
dependency to v0.2.0.
- Add
set_span_events
tofmt::Subscriber
(#2962) - tracing: Allow
&[u8]
to be recorded as event/span field (#2954)
- Set
log
max level when reloading (#1270) - Bump MSRV to 1.63 (#2793)
- Use const
thread_local
s when possible (#2838) - Don't gate
with_ansi()
on the "ansi" feature (#3020) - Updated tracing-serde to 0.2.0 (#3160)
This release of tracing-subscriber
adds support for the NO_COLOR
environment
variable (an informal standard to disable emitting ANSI color escape codes) in
fmt::Layer
, reintroduces support for the chrono
crate, and increases the
minimum supported Rust version (MSRV) to Rust 1.63.0.
It also introduces several minor API improvements.
- chrono: Add
chrono
implementations ofFormatTime
(#2690) - subscriber: Add support for the
NO_COLOR
environment variable infmt::Layer
(#2647) - fmt: make
format::Writer::new()
public (#2680) - filter: Implement
layer::Filter
forOption<Filter>
(#2407)
- log: bump version of
tracing-log
to 0.2 (#2772) - Increased minimum supported Rust version (MSRV) to 1.63.0+.
Thanks to @shayne-fletcher, @dmlary, @kaifastromai, and @jsgf for contributing!
This release of tracing-subscriber
fixes a build error when using env-filter
with recent versions of the regex
crate. It also introduces several minor API
improvements.
- env-filter: Add "unicode-case" and "unicode-perl" to the
regex
dependency, fixing a build error with recent versions ofregex
(#2566) - A number of minor documentation typos and other fixes (#2384, #2378, #2368, #2548)
- filter: Add
fmt::Display
impl forfilter::Targets
(#2343) - fmt: Made
with_ansi(false)
no longer require the "ansi" feature, so that ANSI formatting escapes can be disabled without requiring ANSI-specific dependencies (#2532)
- fmt: Dim targets in the
Compact
formatter, matching the default formatter (#2409)
Thanks to @keepsimple1, @andrewhalle, @LeoniePhiline, @LukeMathWalker, @howardjohn, @daxpedda, and @dbidwell94 for contributing to this release!
This release of tracing-subscriber
fixes a regression introduced in
v0.3.15 where Option::None
's Layer
implementation would
set the max level hint to OFF
. In addition, it adds several new APIs,
including the Filter::event_enabled
method for filtering events based on
fields values, and the ability to log internal errors that occur when writing a
log line.
This release also replaces the dependency on the unmaintained [ansi-term
]
crate with the [nu-ansi-term
] crate, resolving an informational security
advisory (RUSTSEC-2021-0139) for [ansi-term
]'s maintainance status. This
increases the minimum supported Rust version (MSRV) to Rust 1.50+, although the
crate should still compile for the previous MSRV of Rust 1.49+ when the ansi
feature is not enabled.
- layer:
Option::None
'sLayer
impl always setting themax_level_hint
toLevelFilter::OFF
(#2321) - Compilation with
-Z minimal versions
(#2246) - env-filter: Clarify that disabled level warnings are emitted by
tracing-subscriber
(#2285)
- fmt: Log internal errors to
stderr
if writing a log line fails (#2102) - fmt:
FmtLayer::log_internal_errors
andFmtSubscriber::log_internal_errors
methods for configuring whether internal writer errors are printed tostderr
(#2102) - fmt:
#[must_use]
attributes on builders to warn if aSubscriber
is configured but not set as the default subscriber (#2239) - filter:
Filter::event_enabled
method for filtering an event based on its fields (#2245, #2251) - filter:
Targets::default_level
accessor ([#2242])
- ansi: Replaced dependency on unmaintained
ansi-term
crate withnu-ansi-term
((#2287, fixes informational advisory RUSTSEC-2021-0139) tracing-core
: updated to 0.1.30- Minimum Supported Rust Version (MSRV) increased to Rust 1.50+ (when the
ansi
) feature flag is enabled (#2287)
- fmt: Correct inaccuracies in
fmt::init
documentation (#2224) - filter: Fix incorrect doc link in
filter::Not
combinator (#2249)
Thanks to new contributors @cgbur, @DesmondWillowbrook, @RalfJung, and @poliorcetics, as well as returning contributors @CAD97, @connec, @jswrenn, @guswynn, and @bryangarza, for contributing to this release!
This release fixes a bug where the reload
layer would fail to pass through
max_level_hint
to the underlying layer, potentially breaking filtering.
- reload: pass through
max_level_hint
to the innerLayer
(#2204)
Thanks to @guswynn for contributing to this release!
This release fixes multiple filtering bugs in the Layer
implementations for
Option<impl Layer>
and Vec<impl Layer>
.
- layer:
Layer::event_enabled
implementation forOption<impl Layer<S>>
returningfalse
when theOption
isNone
, disabling all events globally (#2193) - layer:
Layer::max_level_hint
implementation forOption<impl Layer<S>>
incorrectly disabling max level filtering when the option isNone
(#2195) - layer:
Layer::max_level_hint
implementation forVec<impl Layer<S>>
returningLevelFilter::ERROR
rather thanLevelFilter::OFF
when theVec
is empty (#2195)
Thanks to @CAD97 and @guswynn for contributing to this release!
This release of tracing-subscriber
fixes a compilation failure due to an
incorrect tracing-core
dependency that was introduced in v0.3.12.
- tracing_core: Updated minimum dependency version to 0.1.28 (#2190)
This release of tracing-subscriber
adds a new Layer::event_enabled
method,
which allows Layer
s to filter events after their field values are recorded;
a Filter
implementation for reload::Layer
, to make using reload
with
per-layer filtering more ergonomic, and additional inherent method downcasting
APIs for the Layered
type. In addition, it includes dependency updates, and
minor fixes for documentation and feature flagging.
- layer:
Layer::event_enabled
method, which can be implemented to filter events based on their field values (#2008) - reload:
Filter
implementation forreload::Layer
(#2159) - layer:
Layered::downcast_ref
andLayered::is
inherent methods (#2160)
- parking_lot: Updated dependency on
parking_lot
to 0.13.0 (#2143) - Replaced
lazy_static
dependency withonce_cell
([#2147])
- Don't enable
tracing-core
features by default (#2107) - Several documentation link and typo fixes (#2064, #2068, #[2077], #2161, #1088)
Thanks to @ben0x539, @jamesmunns, @georgemp, @james7132, @jswrenn, @CAD97, and @guswynn for contributing to this release!
This is a bugfix release for the Filter
implementation for EnvFilter
added
in v0.3.10.
- env-filter: Added missing
Filter::on_record
callback toEnvFilter
'sFilter
impl (#2058) - env-filter: Fixed method resolution issues when calling
EnvFilter
methods with both theFilter
andLayer
traits in scope (#2057) - env-filter: Fixed
EnvFilter::builder().parse()
and other parsing methods returning an error when parsing an empty string (#2052)
Thanks to new contributor @Ma124 for contributing to this release!
This release adds several new features, including a Filter
implementation and
new builder API for EnvFilter
, support for using a Vec<L> where L: Layer
as
a Layer
, and a number of smaller API improvements to make working with dynamic
and reloadable layers easier.
- registry: Implement
Filter
forEnvFilter
, allowing it to be used with per-layer filtering (#1983) - registry:
Filter::on_new_span
,Filter::on_enter
,Filter::on_exit
,Filter::on_close
andFilter::on_record
callbacks to allowFilter
s to track span states internally (#1973, #2017, #2031) - registry:
Filtered::filter
andFiltered::filter_mut
accessors (#1959) - registry:
Filtered::inner
andFiltered::inner_mut
accessors to borrow the wrappedLayer
(#2034) - layer: Implement
Layer
forVec<L: Layer>
, to allow composing together a dynamically sized list ofLayer
s (#2027) - layer:
Layer::boxed
method to make type-erasingLayer
s easier (#2026) - fmt:
fmt::Layer::writer
andfmt::Layer::writer_mut
accessors (#2034) - fmt:
fmt::Layer::set_ansi
method to allow changing the ANSI formatting configuration at runtime (#2034) - env-filter:
EnvFilter::builder
to configure a newEnvFilter
prior to parsing it (#2035) - Several documentation fixes and improvements (#1972, #1971, #2023, #2023)
- fmt:
fmt::Layer
's auto traits no longer depend on theSubscriber
type parameter's auto traits (#2025) - env-filter: Fixed missing help text when the
ansi
feature is disabled (#2029)
Thanks to new contributors @TimoFreiberg and @wagenet, as well as @CAD97 for contributing to this release!
This release updates the minimum supported Rust version (MSRV) to 1.49.0, and
updates the (optional) dependency on parking_lot
to v0.12.
- Updated minimum supported Rust version (MSRV) to 1.49.0 (#1913)
parking_lot
: updated to v0.12 (008339d)
This release adds experimental support for recording structured field
values using the valuable
crate to the format::Json
formatter. In
particular, user-defined types which are recorded using their
valuable::Valuable
implementations will be serialized as JSON objects,
rather than using their fmt::Debug
representation. See this blog post
for details on valuable
.
Note that valuable
support currently requires --cfg tracing_unstable
. See
the documentation for details.
Additionally, this release includes a number of other smaller API improvements.
- json: Experimental support for recording
valuable
values as structured JSON (#1862, #1901) - filter:
Targets::would_enable
method for testing if aTargets
filter would enable a given target (#1903) - fmt:
map_event_format
,map_fmt_fields
, andmap_writer
methods tofmt::Layer
andfmt::SubscriberBuilder
(#1871)
tracing-core
: updated to 0.1.22
- Set
smallvec
minimal version to 1.2.0, to fix compilation errors with-Z minimal-versions
(#1890) - Minor documentation fixes (#1902, #1893)
Thanks to @guswynn, @glts, and @lilyball for contributing to this release!
This release adds combinators for combining filters.
Additionally, this release also updates the thread-local
crate to v1.1.4,
fixing warnings for the security advisory RUSTSEC-2022-0006. Note that
previous versions of tracing-subscriber
did not use any of the thread-local
crate's APIs effected by the vulnerability. However, updating the version fixes
warnings emitted by cargo audit
and similar tools.
- filter: Added combinators for combining filters (#1578)
- registry: Updated
thread-local
to v1.1.4 (#1858)
Thanks to new contributor @matze for contributing to this release!
This release adds configuration options to tracing_subscriber::fmt
to log
source code locations for events.
- fmt: Added
with_file
andwith_line_number
configuration methods tofmt::Format
,fmt::SubscriberBuilder
, andfmt::Layer
(#1773)
- fmt: Removed incorrect leading comma from span fields with the
Pretty
formatter (#1833)
- fmt: Deprecated
Pretty::with_source_location
, as it can now be replaced by the more generalFormat
,SubscriberBuilder
, andLayer
methods (#1773)
Thanks to new contributor @renecouto for contributing to this release!
This release re-enables RUST_LOG
filtering in tracing_subscriber::fmt
's
default initialization methods, and adds an OffsetLocalTime
formatter for
using local timestamps with the time
crate.
- fmt: Added
OffsetLocalTime
formatter tofmt::time
for formatting local timestamps with a fixed offset (#1772)
- fmt: Added a
Targets
filter tofmt::init()
andfmt::try_init()
when the "env-filter" feature is disabled, so thatRUST_LOG
is still honored (#1781)
Thanks to @marienz and @ishitatsuyuki for contributing to this release!
This release contains bugfixes for the fmt
module, as well as documentation
improvements.
- fmt: Fixed
fmt
not emitting log lines when timestamp formatting fails (#1689) - fmt: Fixed double space before thread IDs with
Pretty
formatter (#1778) - Several documentation improvements (#1608, #1699, #1701)
Thanks to new contributors @Swatinem and @rukai for contributing to this release!
This release fixes a pair of regressions in tracing-subscriber
's fmt
module.
- fmt: Fixed missing event fields with
Compact
formatter (#1755) - fmt: Fixed
PrettyFields
formatter (and thusformat::Pretty
event formatter) ignoring thefmt::Layer
's ANSI color code configuration (#1747)
- fmt: Fixed
MakeWriter
filtering not working withBoxMakeWriter
(#1694)
- fmt:
Writer::has_ansi_escapes
method to check if an output supports ANSI terminal formatting escape codes (#1696) - fmt: Added additional ANSI terminal formatting to field formatters when supported (#1702)
- fmt: Added
FmtContext::span_scope
,FmtContext::event_scope
, andFmtContext::parent_span
methods for accessing the current span and its scope when formatting an event (#1728) - fmt: Improved documentation on implementing event formatters (#1727)
This release fixes a few issues related to feature flagging.
- time: Compilation error when enabling the "time" feature flag without also enabling the "local-time" feature flag (#1685)
- registry: Unused method warnings when the "std" feature is enabled but the "registry" feature is disabled (#1686)
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.
- Removed APIs deprecated in the v0.2.x release series.
- Renamed
Layer::new_span
toLayer::on_new_span
(#1674) - Removed
Layer
impl forArc<L: Layer<S>>
andArc<dyn Layer<S> + ...>
(#1649) - Replaced the
chrono
crate with thetime
crate for timestamp formatting, to resolve RUSTSEC-2020-0159 (#1646) - Removed
json
andenv-filter
from default features. They must now be enabled explictly (#1647). This means thatRUST_LOG
-based filters will not work unless theenv-filter
feature is enabled. - Changed
FormatEvent::format_event
andFormatFields::format_fields
trait methods to take aWriter
type, rather than a&mut dyn fmt::Write
trait object (#1661) - Changed the signature of the
MakeWriter
trait by adding a lifetime parameter (#781)
- layer: Renamed
Layer::new_span
toLayer::on_new_span
(#1674) - fmt: Changed
FormatEvent::format_event
andFormatFields::format_fields
trait methods to take aWriter
type, rather than a&mut dyn fmt::Write
trait object (#1661) - json, env-filter:
json
andenv-filter
feature flags are no longer enabled by default (#1647)
- Removed deprecated
CurrentSpan
type (#1320) - registry: Removed deprecated
SpanRef::parents
iterator, replaced bySpanRef::scope
in #1431 ([#1648)]) - layer: Removed deprecated
Context::scope
iterator, replaced byContext::span_scope
andContext::event_scope
in #1431 and #1434 ([#1648)]) - layer: Removed
Layer
impl forArc<L: Layer<S>>
andArc<dyn Layer<S> + ...>
. These interfere with per-layer filtering. (#1649) - fmt: Removed deprecated
LayerBuilder
type (#1673) - fmt: Removed
fmt::Layer::on_event
(renamed tofmt::Layer::fmt_event
) (#1673) - fmt, chrono: Removed the
chrono
feature flag and APIs for using thechrono
crate for timestamp formatting (#1646)
- fmt, time:
LocalTime
andUtcTime
types for formatting timestamps using thetime
crate (#1646) - fmt: Added a lifetime parameter to the
MakeWriter
trait, allowing it to return a borrowed writer. This enables implementations ofMakeWriter
for types such asMutex<T: io::Write>
andstd::fs::File
. (#781) - env-filter: Documentation improvements ([#1637])
- Support for some APIs on
#![no_std]
targets, by disabling thestd
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.
- registry: Forward
Filtered::downcast_raw
to wrappedLayer
(#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.
- Fixed compilation on Rust 1.42.0 (#1580, #1581)
- registry: Ensure per-layer filter
enabled
state is cleared when a global filter short-circuits filter evaluation (#1575) - layer: Fixed
Layer::on_layer
not being called forBox
edLayer
s, which broke per-layer filtering (#1576)
- filter: Added
Targets::iter
, returning an iterator over the set of target-level pairs enabled by aTargets
filter (#1574) - filter: Added
IntoIterator
implementations forTargets
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.
- env-filter: Fixed excessive
EnvFilter
memory use (#1568) - filter: Fixed a panic that may occur in debug mode when using per-layer filters together with global filters (#1569)
- Fixed incorrect documentation formatting (#1572)
This fixes a regression where the filter::ParseError
type was accidentally
renamed.
- filter: Fix
filter::ParseError
accidentally being renamed tofilter::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.
- registry:
SpanRef::parent_id
, which cannot properly support per-layer filtering. Use.parent().map(SpanRef::id)
instead. (#1523)
- layer
Context
methods that are provided when theSubscriber
implementsLookupSpan
no longer require the "registry" feature flag (#1525) - layer
fmt::Debug
implementation forLayered
no longer requires theS
type parameter to implementDebug
(#1528)
- registry:
Filter
trait,Filtered
type,Layer::with_filter
method, and other APIs for per-layer filtering (#1523) - filter:
FilterFn
andDynFilterFn
types that implement global (Layer
) and per-layer (Filter
) filtering for closures and function pointers (#1523) - filter:
Targets
filter, which implements a lighter-weight form ofEnvFilter
-like filtering (#1550) - env-filter: Added support for filtering on floating-point values (#1507)
- layer:
Layer::on_layer
callback, called when layering theLayer
onto aSubscriber
(#1523) - layer:
Layer
implementations forBox<L>
andArc<L>
whereL: Layer
([#1536]) - layer:
Layer
implementations forBox<dyn Layer<S> + Send + Sync + 'static>
andArc<dyn Layer<S> + Send + Sync + 'static>
([#1536]) - A number of small documentation fixes and improvements (#1553, #1544, #1539, #1524)
Special thanks to new contributors @jsgf and @maxburke for contributing to this release!
- fmt: Fixed
fmt
printing only the firstsource
for errors with a chain of sources (#1460) - fmt: Fixed missing space between level and event in the
Pretty
formatter (#1498) - json: Fixed
Json
formatter not honoringwithout_time
andwith_level
configurations (#1463)
- registry: Improved panic message when cloning a span whose ID doesn't exist, to aid in debugging issues with multiple subscribers (#1483)
- registry: Improved documentation on span ID generation (#1453)
Thanks to new contributors @joshtriplett and @lerouxrgd, and returning contributor @teozkr, for contributing to this release!
- registry:
SpanRef::parents
,SpanRef::from_root
, andContext::scope
iterators, which are replaced by newSpanRef::scope
andScope::from_root
iterators (#1413)
- registry:
SpanRef::scope
method, which returns a leaf-to-rootIterator
including the leaf span (#1413) - registry:
Scope::from_root
method, which reverses thescope
iterator to iterate root-to-leaf (#1413) - registry:
Context::event_span
method, which looks up the parent span of an event (#1434) - registry:
Context::event_scope
method, returning aScope
iterator over the span scope of an event (#1434) - fmt:
MakeWriter::make_writer_for
method, which allows returning a different writer based on a span or event's metadata (#1141) - fmt:
MakeWriterExt
trait, withwith_max_level
,with_min_level
,with_filter
,and
, andor_else
combinators (#1274) - fmt:
MakeWriter
implementation forArc<W> where &W: io::Write
(#1274)
Thanks to @teozkr and @Folyd for contributing to this release!
- Deprecated the
CurrentSpan
type, which is inefficient and largely superseded by theregistry
API (#1321)
- json: Invalid JSON emitted for events in spans with no fields (#1333)
- json: Missing span data for synthesized new span, exit, and close events (#1334)
- fmt: Extra space before log lines when timestamps are disabled (#1355)
- env-filter: Support for filters on spans whose names contain any
characters other than
{
and]
(#1368)
Thanks to @Folyd, and new contributors @akinnane and @aym-v for contributing to this release!
- fmt:
Pretty
formatter now honorswith_ansi(false)
to disable ANSI terminal formatting (#1240) - fmt: Fixed extra padding when using
Pretty
formatter (#1275) - chrono: Removed extra trailing space with
ChronoLocal
time formatter (#1103)
- fmt: Added
FmtContext::current_span()
method, returning the current span (#1290) - fmt:
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!
- env-filter: Fixed directives where the level is in mixed case (such as
Info
) failing to parse (#1126) - fmt: Fixed
fmt::Subscriber
not providing a max-level hint (#1251) tracing-subscriber
no longer enablestracing
andtracing-core
's default features (#1144)
- chrono: Updated
chrono
dependency to 0.4.16 (#1189) - log: Updated
tracing-log
dependency to 0.1.2
Thanks to @salewski, @taiki-e, @davidpdrsn and @markdingram for contributing to this release!
- fmt: Fixed wrong lifetime parameters on
FormatFields
impl forFmtContext
(#1082)
- fmt:
format::Pretty
, an aesthetically pleasing, human-readable event formatter for local development and user-facing CLIs (#1080) - fmt:
FmtContext::field_format
, which returns the subscriber's field formatter (#1082)
- registry: Fixed
Registry::new
allocating an excessively large amount of memory, most of which would never be used (#1064)
- registry: Improved
new_span
performance by reusingHashMap
allocations forExtensions
(#1064) - registry: Significantly improved the performance of
Registry::enter
andRegistry::exit
(#1058)
- Updated
tracing-core
to 0.1.17 (#992)
- env-filter: Added support for filtering on targets which contain dashes (#1014)
- env-filter: Added a warning when creating an
EnvFilter
that contains directives that would enable a level disabled by thetracing
crate'sstatic_max_level
features (#1021)
Thanks to @jyn514 and @bkchr for contributing to this release!
- env-filter: Fixed a regression where
Option<Level>
lost itsInto<LevelFilter>
impl (#966) - env-filter: Fixed
EnvFilter
enabling spans that should not be enabled when multiple subscribers are in use (#927)
- json:
format::Json
now outputs fields in a more readable order (#892) - Updated
tracing-core
dependency to 0.1.16
- fmt: Add
BoxMakeWriter
for erasing the type of aMakeWriter
implementation (#958) - fmt: Add
TestWriter
MakeWriter
implementation to support libtest output capturing (#938) - layer: Add
Layer
impl forOption<T> where T: Layer
(#910) - env-filter: Add
From<Level>
impl forDirective
(#918) - Multiple documentation fixes and improvements
Thanks to @Pothulapati, @samrg472, @bryanburgers, @keetonian, and @SriRamanujam for contributing to this release!
- env-filter: Incorrect max level hint when filters involving span field values are in use (#907)
- registry: Fixed inconsistent span stacks when multiple registries are in use on the same thread (#901)
- env-filter:
regex
dependency enables fewer unused feature flags (#899)
Thanks to @bdonlan and @jeromegn for contributing to this release!
- docs: Incorrect formatting (#862)
- filter:
LevelFilter
is now a re-export of thetracing_core::LevelFilter
type, it can now be used interchangeably with the versions intracing
andtracing-core
(#853) - filter: Significant performance improvements when comparing
LevelFilter
s andLevel
s (#853) - Updated the minimum
tracing-core
dependency to 0.1.12 (#853)
- filter:
LevelFilter
andEnvFilter
now participate intracing-core
's max level hinting, improving performance significantly in some use cases where levels are disabled globally (#853)
- fmt: Fixed compilation failure on MSRV when the
chrono
feature is disabled (#844)
- fmt: Span lookup methods defined by
layer::Context
are now also provided byFmtContext
(#834)
- fmt: When the
chrono
dependency is enabled, theSystemTime
timestamp formatter now emits human-readable timestamps rather than usingSystemTime
'sfmt::Debug
implementation (chrono
is still required for customized timestamp formatting) (#807) - ansi: Updated
ansi_term
dependency to 0.12 (#816)
- json:
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) - json:
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) - fmt:
with_thread_names
andwith_thread_ids
methods to configurefmt::Subscriber
s andfmt::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: Updated the optional
parking_lot
dependency to accept the latestparking_lot
version (#774)
- fmt: Fixed events with explicitly overridden parent spans being formatted as though they were children of the current span (#767)
- fmt: Added the option to print synthesized events when spans are created, entered, exited, and closed, including span durations (#761)
- Documentation clarification and improvement (#762, #769)
Thanks to @rkuhn, @greenwoodcm, and @Ralith for contributing to this release!
- fmt: Fixed an issue in the JSON formatter where using
Span::record
would result in malformed spans (#709)
- fmt: Bump sharded-slab dependency (#679)
- fmt: remove trailing space in
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: Shorthand free functions for constructing most types in
fmt
(includingtracing_subscriber::fmt()
to return aSubscriberBuilder
,tracing_subscriber::fmt::layer()
to return a formatLayer
, etc) (#660) - registry: Shorthand free function
tracing_subscriber::registry()
to construct a new registry (#660) - Added
SubscriberInitExt
extension trait for more ergonomic subscriber initialization (#660)
- fmt: Moved
LayerBuilder
methods toLayer
(#655)
- fmt:
LayerBuilder
, asLayer
now implements all builder methods (#655)
- fmt: Fixed
Compact
formatter not omitting levels withwith_level(false)
(#657) - fmt: Fixed
fmt::Layer
duplicating the fields for a new span if another layer has already formatted its fields (#634) - fmt: Added missing space when using
record
to add new fields to a span that already has fields (#659) - Updated outdated documentation (#647)
- env-filter: Regression where filter directives were selected in the order they were listed, rather than most specific first (#624)
- fmt: Added
flatten_event
toSubscriberBuilder
(#599) - fmt: Added
with_level
toSubscriberBuilder
(#594)
- filter:
EnvFilter
directive selection now behaves correctly (i.e. likeenv_logger
) (#583)
- filter: Fixed
EnvFilter
incorrectly allowing less-specific filter directives to enable events that are disabled by more-specific filters (#583) - filter: Multiple significant
EnvFilter
performance improvements, especially when filtering events generated bylog
records (#578, #583) - filter: Replaced
BTreeMap
withVec
inDirectiveSet
, 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!
- fmt: Renamed
Context
toFmtContext
(#420, #425) - fmt: Renamed
Builder
toSubscriberBuilder
(#420) - filter: Removed
Filter
. UseEnvFilter
instead (#434)
- registry:
Registry
, aSubscriber
implementation thatLayer
s can use as a high-performance, in-memory span store. (#420, #425, #432, #433, #435) - registry: Added
LookupSpan
trait, implemented bySubscriber
s to expose stored span data toLayer
s (#420) - fmt: Added
fmt::Layer
, to allow composing log formatting with otherLayer
s - fmt: Added support for JSON field and event formatting (#377, #415)
- filter: Documentation for filtering directives (#554)
- fmt: Renamed
Context
toFmtContext
(#420, #425) (BREAKING) - fmt: Renamed
Builder
toSubscriberBuilder
(#420) (BREAKING) - fmt: Reimplemented
fmt::Subscriber
in terms of theRegistry
andLayer
s (#420)
- filter: Removed
Filter
. UseEnvFilter
instead (#434) (BREAKING)
- fmt: Fixed memory leaks in the slab used to store per-span data (3c35048)
- fmt:
fmt::SubscriberBuilder::init
not setting uplog
compatibility (#489) - fmt: Spans closed by a child span closing not also closing their parents (#514)
- Layer: Fixed
Layered
subscribers failing to downcast to their own type (#549) - Layer: Fixed
Layer::downcast_ref
returning invalid references (#454)
- fmt: Fixed empty
{}
printed after spans with no fields (f079f2d) - fmt: Fixed inconsistent formatting when ANSI colors are disabled (506a482)
- fmt: Fixed misaligned levels when ANSI colors are disabled (eba1adb)
- Fixed warnings on nightly Rust compilers (#558)
- env_filter: Documentation for filtering directives (#554)
- registry, env_filter: Updated
smallvec
dependency to 0.1 (#543)
- registry: Fixed a memory leak in the slab used to store per-span data (3c35048)
- Layer: Fixed
Layered
subscribers failing to downcast to their own type (#549) - fmt: Fixed a panic when multiple layers insert
FormattedFields
extensions from the same formatter type (1c3bb70) - fmt: Fixed
fmt::Layer::on_record
inserting a newFormattedFields
when formatted fields for a span already exist (1c3bb70)
- registry: Removed inadvertently committed
dbg!
macros (#533)
- fmt: Public
FormattedFields::new
constructor (#478) - fmt: Added examples to
fmt::Layer
documentation (#510) - Documentation now shows what feature flags are required by each API item (#525)
- fmt: Missing space between timestamp and level (#480)
- fmt: Incorrect formatting with
with_target(false)
(#481) - fmt:
fmt::SubscriberBuilder::init
not setting uplog
compatibility (#489) - registry: Spans exited out of order not being closed properly on exit (#509)
- registry: Memory leak when spans are closed by a child span closing (#514)
- registry: Spans closed by a child span closing not also closing their parents (#514)
- Compilation errors with
no-default-features
(#499, #500)
LookupSpans
implementation forLayered
(#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 aSpanRef
to the current span's data (#460)
- Lifetimes on some new
Context
methods to be less restrictive (#460)
Layer::downcast_ref
returning invalid references (#454)- Compilation failure on 32-bit platforms (#462)
- Compilation failure with ANSI formatters (#438)
Registry
, a reusable span store thatLayer
s can use a high-performance, in-memory store. (#420, #425, #432, #433, #435)- Reimplemented
fmt::Subscriber
in terms of theRegistry
andLayer
s (#420) - Add benchmarks for fmt subscriber (#421)
- Add support for JSON field and event formatting (#377, #415)
- BREAKING: Change
fmt::format::FormatFields
andfmt::format::FormatEvent
to accept a mandatoryFmtContext
. TheseFormatFields
andFormatEvent
will likely see additional breaking changes in subsequent alpha. (#420, #425) - BREAKING: Removed
Filter
. UseEnvFilter
instead (#434)
Thanks to all the contributors to this release!
- @pimeys for #377 and #415
- Add
init
andtry_init
functions toFmtSubscriber
(#385) - Add
ChronoUtc
andChronoLocal
timers, RFC 3339 support (#387) - Add
tracing::subscriber::set_default
which sets the default subscriber and returns a drop guard. This drop guard will reset the dispatch on drop (#388).
- Fix default level for
EnvFilter
. SettingRUST_LOG=target
previously only theERROR
level, while it should enable everything.tracing-subscriber
now defaults toTRACE
if no level is specified (#401) - Fix
tracing-log
feature flag for init + try_init. The feature flagtracing_log
was used instead of the correcttracing-log
. As a result, bothtracing-log
andtracing_log
needed to be specified in order to initialize the global logger. Onlytracing-log
needs to be specified now (#400).
Thanks to all the contributors to this release!
- @emschwartz for #385, #387, #400 and #401
- @bIgBV for #388
- Spans not being closed properly when
FmtSubscriber::current_span
is used (#371)
- Spans entered twice on the same thread sometimes being completely exited when the more deeply-nested entry is exited (#361)
- Setting
with_ansi(false)
onFmtSubscriber
not disabling ANSI color formatting for timestamps (#354) - Incorrect reference counting in
FmtSubscriber
that could cause spans to not be closed when all references are dropped (#366)
Layered
subscribers not properly forwarding calls tocurrent_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 fromlog
records bytracing-log
(#344)
- Renamed
Filter
toEnvFilter
, deprecatedFilter
(#339) - Renamed "filter" feature flag to "env-filter", deprecated "filter" (#339)
FmtSubscriber
now defaults to enabling only theINFO
level and above when a max level filter orEnvFilter
is not set (#336)- Made
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 aFmtSubscriber
without requiring the use ofEnvFilter
(#336)Layer
implementation forLevelFilter
(#336)EnvFilter
now implementsfmt::Display
(#329)
- Removed dependency on
crossbeam-util
(#348)
- Potential double panic in
CurrentSpan
(#325)
- Initial release