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