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