1# Change Log 2 3## [Unreleased] 4 5## [0.4.17] - 2022-04-29 6 7* Update `kv_unstable` internal dependencies. 8 9## [0.4.16] - 2022-03-22 10 11* Fix a conflict with unqualified `Option` use in macros. 12 13## [0.4.15] - 2022-02-23 14 15* Silence a warning about the deprecated `spin_loop_hint`. 16* Relax ordering in the atomic `set_max_level` call. 17* Add thumbv4t-none-eabi to targets that don't support atomics 18* Allow levels to be iterated over. 19* Implement `Log` on some common wrapper types. 20* Improvements to test coverage. 21* Improvements to documentation. 22* Add key-value support to the `log!` macros. 23* Tighten `kv_unstable` internal dependencies so they don't bump past their current alpha. 24* Add a simple visit API to `kv_unstable`. 25* Support `NonZero*` integers as values in structured logging 26* Support static strings as keys in structured logging 27 28## [0.4.14] - 2021-01-27 29 30* Remove the `__private_api_log_lit` special case. 31* Fixed incorrect combination of `kv_unstable` and `std` features causing compile failures. 32* Remove unstable `Value::to_*` conversions that were incorrectly using `as`. 33* Rename unstable `Value::to_error` to `Value::to_borrowed_error`. 34 35## [0.4.13] - 2021-01-11 36 37* 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). 38 39## [0.4.12] - 2020-12-24 40 41### New 42 43* Support platforms without atomics by racing instead of failing to compile 44* Implement `Log` for `Box<T: Log>` 45* Update `cfg-if` to `1.0` 46* Internal reworks of the structured logging API. Removed the `Fill` API 47and added `source::as_map` and `source::as_list` to easily serialize a `Source` 48as either a map of `{key: value, ..}` or as a list of `[(key, value), ..]`. 49 50### Fixed 51 52* Fixed deserialization of `LevelFilter` to use their `u64` index variants 53 54## [0.4.11] - 2020-07-09 55 56### New 57 58* Support coercing structured values into concrete types. 59* Reference the `win_dbg_logger` in the readme. 60 61### Fixed 62 63* Updates a few deprecated items used internally. 64* Fixed issues in docs and expands sections. 65* Show the correct build badge in the readme. 66* Fix up a possible inference breakage with structured value errors. 67* Respect formatting flags in structured value formatting. 68 69## [0.4.10] - 2019-12-16 (yanked) 70 71### Fixed 72 73* Fixed the `log!` macros so they work in expression context (this regressed in `0.4.9`, which has been yanked). 74 75## [0.4.9] - 2019-12-12 (yanked) 76 77### Minimum Supported Rust Version 78 79This release bumps the minimum compiler version to `1.31.0`. This was mainly needed for `cfg-if`, 80but between `1.16.0` and `1.31.0` there are a lot of language and library improvements we now 81take advantage of. 82 83### New 84 85* Unstable support for capturing key-value pairs in a record using the `log!` macros 86 87### Improved 88 89* Better documentation for max level filters. 90* Internal updates to line up with bumped MSRV 91 92## [0.4.8] - 2019-07-28 93 94### New 95 96* Support attempting to get `Record` fields as static strings. 97 98## [0.4.7] - 2019-07-06 99 100### New 101 102* Support for embedded environments with thread-unsafe initialization. 103* Initial unstable support for capturing structured data under the `kv_unstable` 104feature gate. This new API doesn't affect existing users and may change in future 105patches (so those changes may not appear in the changelog until it stabilizes). 106 107### Improved 108 109* Docs for using `log` with the 2018 edition. 110* Error messages for macros missing arguments. 111 112## [0.4.6] - 2018-10-27 113 114### Improved 115 116* Support 2018-style macro import for the `log_enabled!` macro. 117 118## [0.4.5] - 2018-09-03 119 120### Improved 121 122* Make `log`'s internal helper macros less likely to conflict with user-defined 123 macros. 124 125## [0.4.4] - 2018-08-17 126 127### Improved 128 129* Support 2018-style imports of the log macros. 130 131## [0.4.3] - 2018-06-29 132 133### Improved 134 135* More code generation improvements. 136 137## [0.4.2] - 2018-06-05 138 139### Improved 140 141* Log invocations now generate less code. 142 143### Fixed 144 145* Example Logger implementations now properly set the max log level. 146 147## [0.4.1] - 2017-12-30 148 149### Fixed 150 151* Some doc links were fixed. 152 153## [0.4.0] - 2017-12-24 154 155The changes in this release include cleanup of some obscure functionality and a more robust public 156API designed to support bridges to other logging systems, and provide more flexibility to new 157features in the future. 158 159### Compatibility 160 161Vast portions of the Rust ecosystem use the 0.3.x release series of log, and we don't want to force 162the community to go through the pain of upgrading every crate to 0.4.x at the exact same time. Along 163with 0.4.0, we've published a new 0.3.9 release which acts as a "shim" over 0.4.0. This will allow 164crates using either version to coexist without losing messages from one side or the other. 165 166There is one caveat - a log message generated by a crate using 0.4.x but consumed by a logging 167implementation using 0.3.x will not have a file name or module path. Applications affected by this 168can upgrade their logging implementations to one using 0.4.x to avoid losing this information. The 169other direction does not lose any information, fortunately! 170 171**TL;DR** Libraries should feel comfortable upgrading to 0.4.0 without treating that as a breaking 172change. Applications may need to update their logging implementation (e.g. env-logger) to a newer 173version using log 0.4.x to avoid losing module and file information. 174 175### New 176 177* The crate is now `no_std` by default. 178* `Level` and `LevelFilter` now implement `Serialize` and `Deserialize` when the `serde` feature is 179 enabled. 180* The `Record` and `Metadata` types can now be constructed by third-party code via a builder API. 181* The `logger` free function returns a reference to the logger implementation. This, along with the 182 ability to construct `Record`s, makes it possible to bridge from another logging framework to 183 this one without digging into the private internals of the crate. The standard `error!` `warn!`, 184 etc, macros now exclusively use the public API of the crate rather than "secret" internal APIs. 185* `Log::flush` has been added to allow crates to tell the logging implementation to ensure that all 186 "in flight" log events have been persisted. This can be used, for example, just before an 187 application exits to ensure that asynchronous log sinks finish their work. 188 189### Removed 190 191* The `shutdown` and `shutdown_raw` functions have been removed. Supporting shutdown significantly 192 complicated the implementation and imposed a performance cost on each logging operation. 193* The `log_panics` function and its associated `nightly` Cargo feature have been removed. Use the 194 [log-panics](https://crates.io/crates/log-panics) instead. 195 196### Changed 197 198* The `Log` prefix has been removed from type names. For example, `LogLevelFilter` is now 199 `LevelFilter`, and `LogRecord` is now `Record`. 200* The `MaxLogLevelFilter` object has been removed in favor of a `set_max_level` free function. 201* The `set_logger` free functions have been restructured. The logger is now directly passed to the 202 functions rather than a closure which returns the logger. `set_logger` now takes a `&'static 203 Log` and is usable in `no_std` contexts in place of the old `set_logger_raw`. `set_boxed_logger` 204 is a convenience function which takes a `Box<Log>` but otherwise acts like `set_logger`. It 205 requires the `std` feature. 206* The `file` and `module_path` values in `Record` no longer have the `'static` lifetime to support 207 integration with other logging frameworks that don't provide a `'static` lifetime for the 208 equivalent values. 209* The `file`, `line`, and `module_path` values in `Record` are now `Option`s to support integration 210 with other logging frameworks that don't provide those values. 211 212### In the Future 213 214* We're looking to add support for *structured* logging - the inclusion of extra key-value pairs of 215 information in a log event in addition to the normal string message. This should be able to be 216 added in a backwards compatible manner to the 0.4.x series when the design is worked out. 217 218## Older 219 220Look at the [release tags] for information about older releases. 221 222[Unreleased]: https://github.com/rust-lang-nursery/log/compare/0.4.17...HEAD 223[0.4.17]: https://github.com/rust-lang-nursery/log/compare/0.4.16...0.4.17 224[0.4.16]: https://github.com/rust-lang-nursery/log/compare/0.4.15...0.4.16 225[0.4.15]: https://github.com/rust-lang-nursery/log/compare/0.4.13...0.4.15 226[0.4.14]: https://github.com/rust-lang-nursery/log/compare/0.4.13...0.4.14 227[0.4.13]: https://github.com/rust-lang-nursery/log/compare/0.4.11...0.4.13 228[0.4.12]: https://github.com/rust-lang-nursery/log/compare/0.4.11...0.4.12 229[0.4.11]: https://github.com/rust-lang-nursery/log/compare/0.4.10...0.4.11 230[0.4.10]: https://github.com/rust-lang-nursery/log/compare/0.4.9...0.4.10 231[0.4.9]: https://github.com/rust-lang-nursery/log/compare/0.4.8...0.4.9 232[0.4.8]: https://github.com/rust-lang-nursery/log/compare/0.4.7...0.4.8 233[0.4.7]: https://github.com/rust-lang-nursery/log/compare/0.4.6...0.4.7 234[0.4.6]: https://github.com/rust-lang-nursery/log/compare/0.4.5...0.4.6 235[0.4.5]: https://github.com/rust-lang-nursery/log/compare/0.4.4...0.4.5 236[0.4.4]: https://github.com/rust-lang-nursery/log/compare/0.4.3...0.4.4 237[0.4.3]: https://github.com/rust-lang-nursery/log/compare/0.4.2...0.4.3 238[0.4.2]: https://github.com/rust-lang-nursery/log/compare/0.4.1...0.4.2 239[0.4.1]: https://github.com/rust-lang-nursery/log/compare/0.4.0...0.4.1 240[0.4.0]: https://github.com/rust-lang-nursery/log/compare/0.3.8...0.4.0 241[release tags]: https://github.com/rust-lang-nursery/log/releases 242