1# Change Log
2
3## [Unreleased]
4
5## [0.4.22] - 2024-06-27
6
7## What's Changed
8* Add some clarifications to the library docs by @KodrAus in https://github.com/rust-lang/log/pull/620
9* Add links to `colog` crate by @chrivers in https://github.com/rust-lang/log/pull/621
10* adding line_number test + updating some testing infrastructure by @DIvkov575 in https://github.com/rust-lang/log/pull/619
11* Clarify the actual set of functions that can race in _racy variants by @KodrAus in https://github.com/rust-lang/log/pull/623
12* Replace deprecated std::sync::atomic::spin_loop_hint() by @Catamantaloedis in https://github.com/rust-lang/log/pull/625
13* Check usage of max_level features by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/627
14* Remove unneeded import by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/628
15* Loosen orderings for logger initialization in https://github.com/rust-lang/log/pull/632. Originally by @pwoolcoc in https://github.com/rust-lang/log/pull/599
16* Use Location::caller() for file and line info in https://github.com/rust-lang/log/pull/633. Originally by @Cassy343 in https://github.com/rust-lang/log/pull/520
17
18## New Contributors
19* @chrivers made their first contribution in https://github.com/rust-lang/log/pull/621
20* @DIvkov575 made their first contribution in https://github.com/rust-lang/log/pull/619
21* @Catamantaloedis made their first contribution in https://github.com/rust-lang/log/pull/625
22
23**Full Changelog**: https://github.com/rust-lang/log/compare/0.4.21...0.4.22
24
25## [0.4.21] - 2024-02-27
26
27## What's Changed
28* Minor clippy nits by @nyurik in https://github.com/rust-lang/log/pull/578
29* Simplify Display impl by @nyurik in https://github.com/rust-lang/log/pull/579
30* Set all crates to 2021 edition by @nyurik in https://github.com/rust-lang/log/pull/580
31* Various changes based on review by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/583
32* Fix typo in file_static() method doc by @dimo414 in https://github.com/rust-lang/log/pull/590
33* Specialize empty key value pairs by @EFanZh in https://github.com/rust-lang/log/pull/576
34* Fix incorrect lifetime in Value::to_str() by @peterjoel in https://github.com/rust-lang/log/pull/587
35* Remove some API of the key-value feature by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/585
36* Add logcontrol-log and log-reload by @swsnr in https://github.com/rust-lang/log/pull/595
37* Add Serialization section to kv::Value docs by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/593
38* Rename Value::to_str to to_cow_str by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/592
39* Clarify documentation and simplify initialization of `STATIC_MAX_LEVEL` by @ptosi in https://github.com/rust-lang/log/pull/594
40* Update docs to 2021 edition, test by @nyurik in https://github.com/rust-lang/log/pull/577
41* Add "alterable_logger" link to README.md by @brummer-simon in https://github.com/rust-lang/log/pull/589
42* Normalize line ending by @EFanZh in https://github.com/rust-lang/log/pull/602
43* Remove `ok_or` in favor of `Option::ok_or` by @AngelicosPhosphoros in https://github.com/rust-lang/log/pull/607
44* Use `Acquire` ordering for initialization check by @AngelicosPhosphoros in https://github.com/rust-lang/log/pull/610
45* Get structured logging API ready for stabilization by @KodrAus in https://github.com/rust-lang/log/pull/613
46
47## New Contributors
48* @nyurik made their first contribution in https://github.com/rust-lang/log/pull/578
49* @dimo414 made their first contribution in https://github.com/rust-lang/log/pull/590
50* @peterjoel made their first contribution in https://github.com/rust-lang/log/pull/587
51* @ptosi made their first contribution in https://github.com/rust-lang/log/pull/594
52* @brummer-simon made their first contribution in https://github.com/rust-lang/log/pull/589
53* @AngelicosPhosphoros made their first contribution in https://github.com/rust-lang/log/pull/607
54
55## [0.4.20] - 2023-07-11
56
57* Remove rustversion dev-dependency by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/568
58* Remove `local_inner_macros` usage by @EFanZh in https://github.com/rust-lang/log/pull/570
59
60## [0.4.19] - 2023-06-10
61
62* Use target_has_atomic instead of the old atomic_cas cfg by @GuillaumeGomez in https://github.com/rust-lang/log/pull/555
63* Put MSRV into Cargo.toml by @est31 in https://github.com/rust-lang/log/pull/557
64
65## [0.4.18] - 2023-05-28
66
67* fix markdown links (again) by @hellow554 in https://github.com/rust-lang/log/pull/513
68* add cargo doc to workflow by @hellow554 in https://github.com/rust-lang/log/pull/515
69* Apply Clippy lints by @hellow554 in https://github.com/rust-lang/log/pull/516
70* Replace ad-hoc eq_ignore_ascii_case with slice::eq_ignore_ascii_case by @glandium in https://github.com/rust-lang/log/pull/519
71* fix up windows targets by @KodrAus in https://github.com/rust-lang/log/pull/528
72* typo fix by @jiangying000 in https://github.com/rust-lang/log/pull/529
73* Remove dependency on cfg_if by @EriKWDev in https://github.com/rust-lang/log/pull/536
74* GitHub Workflows security hardening by @sashashura in https://github.com/rust-lang/log/pull/538
75* Fix build status badge by @atouchet in https://github.com/rust-lang/log/pull/539
76* Add call_logger to the documentation by @a1ecbr0wn in https://github.com/rust-lang/log/pull/547
77* Use stable internals for key-value API by @KodrAus in https://github.com/rust-lang/log/pull/550
78* Change wording of list of implementations by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/553
79* Add std-logger to list of implementations by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/554
80* Add `set_max_level_racy` and gate `set_max_level` by @djkoloski in https://github.com/rust-lang/log/pull/544
81* [doc] src/lib.rs : prefix an unused variable with an underscore by @OccupyMars2025 in https://github.com/rust-lang/log/pull/561
82* [doc] src/macros.rs :  correct  grammar errors of an example in lib documentation by @OccupyMars2025 in https://github.com/rust-lang/log/pull/562
83
84## [0.4.17] - 2022-04-29
85
86* Update `kv_unstable` internal dependencies.
87
88## [0.4.16] - 2022-03-22
89
90* Fix a conflict with unqualified `Option` use in macros.
91
92## [0.4.15] - 2022-02-23
93
94* Silence a warning about the deprecated `spin_loop_hint`.
95* Relax ordering in the atomic `set_max_level` call.
96* Add thumbv4t-none-eabi to targets that don't support atomics
97* Allow levels to be iterated over.
98* Implement `Log` on some common wrapper types.
99* Improvements to test coverage.
100* Improvements to documentation.
101* Add key-value support to the `log!` macros.
102* Tighten `kv_unstable` internal dependencies so they don't bump past their current alpha.
103* Add a simple visit API to `kv_unstable`.
104* Support `NonZero*` integers as values in structured logging
105* Support static strings as keys in structured logging
106
107## [0.4.14] - 2021-01-27
108
109* Remove the `__private_api_log_lit` special case.
110* Fixed incorrect combination of `kv_unstable` and `std` features causing compile failures.
111* Remove unstable `Value::to_*` conversions that were incorrectly using `as`.
112* Rename unstable `Value::to_error` to `Value::to_borrowed_error`.
113
114## [0.4.13] - 2021-01-11
115
116* This is the same as `0.4.11`, except with a `kv_unstable_std` feature added to aid migrating current dependents to `0.4.14` (which was originally going to be `0.4.13` until it was decided to create a patch from `0.4.11` to minimize disruption).
117
118## [0.4.12] - 2020-12-24
119
120### New
121
122* Support platforms without atomics by racing instead of failing to compile
123* Implement `Log` for `Box<T: Log>`
124* Update `cfg-if` to `1.0`
125* Internal reworks of the structured logging API. Removed the `Fill` API
126and added `source::as_map` and `source::as_list` to easily serialize a `Source`
127as either a map of `{key: value, ..}` or as a list of `[(key, value), ..]`.
128
129### Fixed
130
131* Fixed deserialization of `LevelFilter` to use their `u64` index variants
132
133## [0.4.11] - 2020-07-09
134
135### New
136
137* Support coercing structured values into concrete types.
138* Reference the `win_dbg_logger` in the readme.
139
140### Fixed
141
142* Updates a few deprecated items used internally.
143* Fixed issues in docs and expands sections.
144* Show the correct build badge in the readme.
145* Fix up a possible inference breakage with structured value errors.
146* Respect formatting flags in structured value formatting.
147
148## [0.4.10] - 2019-12-16 (yanked)
149
150### Fixed
151
152* Fixed the `log!` macros so they work in expression context (this regressed in `0.4.9`, which has been yanked).
153
154## [0.4.9] - 2019-12-12 (yanked)
155
156### Minimum Supported Rust Version
157
158This release bumps the minimum compiler version to `1.31.0`. This was mainly needed for `cfg-if`,
159but between `1.16.0` and `1.31.0` there are a lot of language and library improvements we now
160take advantage of.
161
162### New
163
164* Unstable support for capturing key-value pairs in a record using the `log!` macros
165
166### Improved
167
168* Better documentation for max level filters.
169* Internal updates to line up with bumped MSRV
170
171## [0.4.8] - 2019-07-28
172
173### New
174
175* Support attempting to get `Record` fields as static strings.
176
177## [0.4.7] - 2019-07-06
178
179### New
180
181* Support for embedded environments with thread-unsafe initialization.
182* Initial unstable support for capturing structured data under the `kv_unstable`
183feature gate. This new API doesn't affect existing users and may change in future
184patches (so those changes may not appear in the changelog until it stabilizes).
185
186### Improved
187
188* Docs for using `log` with the 2018 edition.
189* Error messages for macros missing arguments.
190
191## [0.4.6] - 2018-10-27
192
193### Improved
194
195* Support 2018-style macro import for the `log_enabled!` macro.
196
197## [0.4.5] - 2018-09-03
198
199### Improved
200
201* Make `log`'s internal helper macros less likely to conflict with user-defined
202  macros.
203
204## [0.4.4] - 2018-08-17
205
206### Improved
207
208* Support 2018-style imports of the log macros.
209
210## [0.4.3] - 2018-06-29
211
212### Improved
213
214* More code generation improvements.
215
216## [0.4.2] - 2018-06-05
217
218### Improved
219
220* Log invocations now generate less code.
221
222### Fixed
223
224* Example Logger implementations now properly set the max log level.
225
226## [0.4.1] - 2017-12-30
227
228### Fixed
229
230* Some doc links were fixed.
231
232## [0.4.0] - 2017-12-24
233
234The changes in this release include cleanup of some obscure functionality and a more robust public
235API designed to support bridges to other logging systems, and provide more flexibility to new
236features in the future.
237
238### Compatibility
239
240Vast portions of the Rust ecosystem use the 0.3.x release series of log, and we don't want to force
241the community to go through the pain of upgrading every crate to 0.4.x at the exact same time. Along
242with 0.4.0, we've published a new 0.3.9 release which acts as a "shim" over 0.4.0. This will allow
243crates using either version to coexist without losing messages from one side or the other.
244
245There is one caveat - a log message generated by a crate using 0.4.x but consumed by a logging
246implementation using 0.3.x will not have a file name or module path. Applications affected by this
247can upgrade their logging implementations to one using 0.4.x to avoid losing this information. The
248other direction does not lose any information, fortunately!
249
250**TL;DR** Libraries should feel comfortable upgrading to 0.4.0 without treating that as a breaking
251change. Applications may need to update their logging implementation (e.g. env-logger) to a newer
252version using log 0.4.x to avoid losing module and file information.
253
254### New
255
256* The crate is now `no_std` by default.
257* `Level` and `LevelFilter` now implement `Serialize` and `Deserialize` when the `serde` feature is
258    enabled.
259* The `Record` and `Metadata` types can now be constructed by third-party code via a builder API.
260* The `logger` free function returns a reference to the logger implementation. This, along with the
261    ability to construct `Record`s, makes it possible to bridge from another logging framework to
262    this one without digging into the private internals of the crate. The standard `error!` `warn!`,
263    etc, macros now exclusively use the public API of the crate rather than "secret" internal APIs.
264* `Log::flush` has been added to allow crates to tell the logging implementation to ensure that all
265    "in flight" log events have been persisted. This can be used, for example, just before an
266    application exits to ensure that asynchronous log sinks finish their work.
267
268### Removed
269
270* The `shutdown` and `shutdown_raw` functions have been removed. Supporting shutdown significantly
271    complicated the implementation and imposed a performance cost on each logging operation.
272* The `log_panics` function and its associated `nightly` Cargo feature have been removed. Use the
273    [log-panics](https://crates.io/crates/log-panics) instead.
274
275### Changed
276
277* The `Log` prefix has been removed from type names. For example, `LogLevelFilter` is now
278    `LevelFilter`, and `LogRecord` is now `Record`.
279* The `MaxLogLevelFilter` object has been removed in favor of a `set_max_level` free function.
280* The `set_logger` free functions have been restructured. The logger is now directly passed to the
281    functions rather than a closure which returns the logger. `set_logger` now takes a `&'static
282    Log` and is usable in `no_std` contexts in place of the old `set_logger_raw`. `set_boxed_logger`
283    is a convenience function which takes a `Box<Log>` but otherwise acts like `set_logger`. It
284    requires the `std` feature.
285* The `file` and `module_path` values in `Record` no longer have the `'static` lifetime to support
286    integration with other logging frameworks that don't provide a `'static` lifetime for the
287    equivalent values.
288* The `file`, `line`, and `module_path` values in `Record` are now `Option`s to support integration
289    with other logging frameworks that don't provide those values.
290
291### In the Future
292
293* We're looking to add support for *structured* logging - the inclusion of extra key-value pairs of
294    information in a log event in addition to the normal string message. This should be able to be
295    added in a backwards compatible manner to the 0.4.x series when the design is worked out.
296
297## Older
298
299Look at the [release tags] for information about older releases.
300
301[Unreleased]: https://github.com/rust-lang-nursery/log/compare/0.4.21...HEAD
302[0.4.21]: https://github.com/rust-lang/log/compare/0.4.20...0.4.21
303[0.4.20]: https://github.com/rust-lang-nursery/log/compare/0.4.19...0.4.20
304[0.4.19]: https://github.com/rust-lang-nursery/log/compare/0.4.18...0.4.19
305[0.4.18]: https://github.com/rust-lang-nursery/log/compare/0.4.17...0.4.18
306[0.4.17]: https://github.com/rust-lang-nursery/log/compare/0.4.16...0.4.17
307[0.4.16]: https://github.com/rust-lang-nursery/log/compare/0.4.15...0.4.16
308[0.4.15]: https://github.com/rust-lang-nursery/log/compare/0.4.13...0.4.15
309[0.4.14]: https://github.com/rust-lang-nursery/log/compare/0.4.13...0.4.14
310[0.4.13]: https://github.com/rust-lang-nursery/log/compare/0.4.11...0.4.13
311[0.4.12]: https://github.com/rust-lang-nursery/log/compare/0.4.11...0.4.12
312[0.4.11]: https://github.com/rust-lang-nursery/log/compare/0.4.10...0.4.11
313[0.4.10]: https://github.com/rust-lang-nursery/log/compare/0.4.9...0.4.10
314[0.4.9]: https://github.com/rust-lang-nursery/log/compare/0.4.8...0.4.9
315[0.4.8]: https://github.com/rust-lang-nursery/log/compare/0.4.7...0.4.8
316[0.4.7]: https://github.com/rust-lang-nursery/log/compare/0.4.6...0.4.7
317[0.4.6]: https://github.com/rust-lang-nursery/log/compare/0.4.5...0.4.6
318[0.4.5]: https://github.com/rust-lang-nursery/log/compare/0.4.4...0.4.5
319[0.4.4]: https://github.com/rust-lang-nursery/log/compare/0.4.3...0.4.4
320[0.4.3]: https://github.com/rust-lang-nursery/log/compare/0.4.2...0.4.3
321[0.4.2]: https://github.com/rust-lang-nursery/log/compare/0.4.1...0.4.2
322[0.4.1]: https://github.com/rust-lang-nursery/log/compare/0.4.0...0.4.1
323[0.4.0]: https://github.com/rust-lang-nursery/log/compare/0.3.8...0.4.0
324[release tags]: https://github.com/rust-lang-nursery/log/releases
325