1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
|
# 0.1.21 (September 28, 2020)
### Fixed
- Incorrect inlining of `Span::new`, `Span::new_root`, and `Span::new_child_of`,
which could result in `dispatcher::get_default` being inlined at the callsite
([#994])
- Regression where using a struct field as a span or event field when other
fields on that struct are borrowed mutably would fail to compile ([#987])
### Changed
- Updated `tracing-core` to 0.1.17 ([#992])
### Added
- `Instrument` trait and `Instrumented` type for attaching a `Span` to a
`Future` ([#808])
- `Copy` implementations for `Level` and `LevelFilter` ([#992])
- Multiple documentation fixes and improvements ([#964], [#980], [#981])
Thanks to @nagisa, and new contributors @SecurityInsanity, @froydnj, @jyn514 and
@TaKO8Ki for contributing to this release!
[#994]: https://github.com/tokio-rs/tracing/pull/994
[#992]: https://github.com/tokio-rs/tracing/pull/992
[#987]: https://github.com/tokio-rs/tracing/pull/987
[#980]: https://github.com/tokio-rs/tracing/pull/980
[#981]: https://github.com/tokio-rs/tracing/pull/981
[#964]: https://github.com/tokio-rs/tracing/pull/964
[#808]: https://github.com/tokio-rs/tracing/pull/808
# 0.1.20 (August 24, 2020)
### Changed
- Significantly reduced assembly generated by macro invocations (#943)
- Updated `tracing-core` to 0.1.15 (#943)
### Added
- Documented minimum supported Rust version policy (#941)
# 0.1.19 (August 10, 2020)
### Fixed
- Updated `tracing-core` to fix incorrect calculation of the global max level
filter (#908)
### Added
- **attributes**: Support for using `self` in field expressions when
instrumenting `async-trait` functions (#875)
- Several documentation improvements (#832, #881, #896, #897, #911, #913)
Thanks to @anton-dutov, @nightmared, @mystor, and @toshokan for contributing to
this release!
# 0.1.18 (July 31, 2020)
### Fixed
- Fixed a bug where `LevelFilter::OFF` (and thus also the `static_max_level_off`
feature flag) would enable *all* traces, rather than *none* (#853)
- **log**: Fixed `tracing` macros and `Span`s not checking `log::max_level`
before emitting `log` records (#870)
### Changed
- **macros**: Macros now check the global max level (`LevelFilter::current`)
before the per-callsite cache when determining if a span or event is enabled.
This significantly improves performance in some use cases (#853)
- **macros**: Simplified the code generated by macro expansion significantly,
which may improve compile times and/or `rustc` optimizatation of surrounding
code (#869, #869)
- **macros**: Macros now check the static max level before checking any runtime
filtering, improving performance when a span or event is disabled by a
`static_max_level_XXX` feature flag (#868)
- `LevelFilter` is now a re-export of the `tracing_core::LevelFilter` type, it
can now be used interchangably with the versions in `tracing-core` and
`tracing-subscriber` (#853)
- Significant performance improvements when comparing `LevelFilter`s and
`Level`s (#853)
- Updated the minimum `tracing-core` dependency to 0.1.12 (#853)
### Added
- **macros**: Quoted string literals may now be used as field names, to allow
fields whose names are not valid Rust identifiers (#790)
- **docs**: Several documentation improvements (#850, #857, #841)
- `LevelFilter::current()` function, which returns the highest level that any
subscriber will enable (#853)
- `Subscriber::max_level_hint` optional trait method, for setting the value
returned by `LevelFilter::current()` (#853)
Thanks to new contributors @cuviper, @ethanboxx, @ben0x539, @dignati,
@colelawrence, and @rbtcollins for helping out with this release!
# 0.1.17 (July 22, 2020)
### Changed
- **log**: Moved verbose span enter/exit log records to "tracing::span::active"
target, allowing them to be filtered separately (#833)
- **log**: All span lifecycle log records without fields now have the `Trace`
log filter, to guard against `log` users enabling them by default with blanket
level filtering (#833)
### Fixed
- **log**/**macros**: Fixed missing implicit imports of the
`tracing::field::debug` and `tracing::field::display` functions inside the
macros when the "log" feature is enabled (#835)
# 0.1.16 (July 8, 2020)
### Added
- **attributes**: Support for arbitrary expressions as fields in `#[instrument]` (#672)
- **attributes**: `#[instrument]` now emits a compiler warning when ignoring unrecognized
input (#672, #786)
- Improved documentation on using `tracing` in async code (#769)
### Changed
- Updated `tracing-core` dependency to 0.1.11
### Fixed
- **macros**: Excessive monomorphization in macros, which could lead to
longer compilation times (#787)
- **log**: Compiler warnings in macros when `log` or `log-always` features
are enabled (#753)
- Compiler error when `tracing-core/std` feature is enabled but `tracing/std` is
not (#760)
Thanks to @nagisa for contributing to this release!
# 0.1.15 (June 2, 2020)
### Changed
- **macros**: Replaced use of legacy `local_inner_macros` with `$crate::` (#740)
### Added
- Docs fixes and improvements (#742, #731, #730)
Thanks to @bnjjj, @blaenk, and @LukeMathWalker for contributing to this release!
# 0.1.14 (May 14, 2020)
### Added
- **log**: When using the [`log`] compatibility feature alongside a `tracing`
`Subscriber`, log records for spans now include span IDs (#613)
- **attributes**: Support for using `#[instrument]` on methods that are part of
[`async-trait`] trait implementations (#711)
- **attributes**: Optional `#[instrument(err)]` argument to automatically emit
an event if an instrumented function returns `Err` (#637)
- Added `#[must_use]` attribute to the guard returned by
`subscriber::set_default` (#685)
### Changed
- **log**: Made [`log`] records emitted by spans much less noisy when span IDs are
not available (#613)
### Fixed
- Several typos in the documentation (#656, #710, #715)
Thanks to @FintanH, @shepmaster, @inanna-malick, @zekisharif, @bkchr, @majecty,
@ilana and @nightmared for contributing to this release!
[`async-trait`]: https://crates.io/crates/async-trait
[`log`]: https://crates.io/crates/log
# 0.1.13 (February 26, 2019)
### Added
- **field**: `field::Empty` type for declaring empty fields whose values will be
recorded later (#548)
- **field**: `field::Value` implementations for `Wrapping` and `NonZero*`
numbers (#538)
- **attributes**: Support for adding arbitrary literal fields to spans generated
by `#[instrument]` (#569)
- **attributes**: `#[instrument]` now emits a helpful compiler error when
attempting to skip a function parameter (#600)
### Changed
- **attributes**: The `#[instrument]` attribute was placed under an on-by-default
feature flag "attributes" (#603)
### Fixed
- Broken and unresolvable links in RustDoc (#595)
Thanks to @oli-cosmian and @Kobzol for contributing to this release!
# 0.1.12 (January 11, 2019)
### Added
- `Span::with_subscriber` method to access the subscriber that tracks a `Span`
(#503)
- API documentation now shows which features are required by feature-flagged
items (#523)
- Improved README examples (#496)
- Documentation links to related crates (#507)
# 0.1.11 (December 20, 2019)
### Added
- `Span::is_none` method (#475)
- `LevelFilter::into_level` method (#470)
- `LevelFilter::from_level` function and `From<Level>` impl (#471)
- Documented minimum supported Rust version (#482)
### Fixed
- Incorrect parameter type to `Span::follows_from` that made it impossible to
call (#467)
- Missing whitespace in `log` records generated when enabling the `log` feature
flag (#484)
- Typos and missing links in documentation (#405, #423, #439)
# 0.1.10 (October 23, 2019)
### Added
- Support for destructuring in arguments to `#[instrument]`ed functions (#397)
- Generated field for `self` parameters when `#[instrument]`ing methods (#397)
- Optional `skip` argument to `#[instrument]` for excluding function parameters
from generated spans (#359)
- Added `dispatcher::set_default` and `subscriber::set_default` APIs, which
return a drop guard (#388)
### Fixed
- Some minor documentation errors (#356, #370)
# 0.1.9 (September 13, 2019)
### Fixed
- Fixed `#[instrument]`ed async functions not compiling on `nightly-2019-09-11`
or newer (#342)
### Changed
- Significantly reduced performance impact of skipped spans and events when a
`Subscriber` is not in use (#326)
- The `log` feature will now only cause `tracing` spans and events to emit log
records when a `Subscriber` is not in use (#346)
### Added
- Added support for overriding the name of the span generated by `#[instrument]`
(#330)
- `log-always` feature flag to emit log records even when a `Subscriber` is set
(#346)
# 0.1.8 (September 3, 2019)
### Changed
- Reorganized and improved API documentation (#317)
### Removed
- Dev-dependencies on `ansi_term` and `humantime` crates, which were used only
for examples (#316)
# 0.1.7 (August 30, 2019)
### Changed
- New (curly-brace free) event message syntax to place the message in the first
field rather than the last (#309)
### Fixed
- Fixed a regression causing macro stack exhaustion when the `log` feature flag
is enabled (#304)
# 0.1.6 (August 20, 2019)
### Added
- `std::error::Error` as a new primitive type (#277)
- Support for mixing key-value fields and `format_args` messages without curly
braces as delimiters (#288)
### Changed
- `tracing-core` dependency to 0.1.5 (#294)
- `tracing-attributes` dependency to 0.1.2 (#297)
# 0.1.5 (August 9, 2019)
### Added
- Support for `no-std` + `liballoc` (#263)
### Changed
- Using the `#[instrument]` attribute on `async fn`s no longer requires a
feature flag (#258)
### Fixed
- The `#[instrument]` macro now works on generic functions (#262)
# 0.1.4 (August 8, 2019)
### Added
- `#[instrument]` attribute for automatically adding spans to functions (#253)
# 0.1.3 (July 11, 2019)
### Added
- Log messages when a subscriber indicates that a span has closed, when the
`log` feature flag is enabled (#180).
### Changed
- `tracing-core` minimum dependency version to 0.1.2 (#174).
### Fixed
- Fixed an issue where event macro invocations with a single field, using local
variable shorthand, would recur infinitely (#166).
- Fixed uses of deprecated `tracing-core` APIs (#174).
# 0.1.2 (July 6, 2019)
### Added
- `Span::none()` constructor, which does not require metadata and
returns a completely empty span (#147).
- `Span::current()` function, returning the current span if it is
known to the subscriber (#148).
### Fixed
- Broken macro imports when used prefixed with `tracing::` (#152).
# 0.1.1 (July 3, 2019)
### Changed
- `cfg_if` dependency to 0.1.9.
### Fixed
- Compilation errors when the `log` feature is enabled (#131).
- Unclear wording and typos in documentation (#124, #128, #142).
# 0.1.0 (June 27, 2019)
- Initial release
|