- Add some clarifications to the library docs by @KodrAus in #620
- Add links to
colog
crate by @chrivers in #621 - adding line_number test + updating some testing infrastructure by @DIvkov575 in #619
- Clarify the actual set of functions that can race in _racy variants by @KodrAus in #623
- Replace deprecated std::sync::atomic::spin_loop_hint() by @Catamantaloedis in #625
- Check usage of max_level features by @Thomasdezeeuw in #627
- Remove unneeded import by @Thomasdezeeuw in #628
- Loosen orderings for logger initialization in #632. Originally by @pwoolcoc in #599
- Use Location::caller() for file and line info in #633. Originally by @Cassy343 in #520
- @chrivers made their first contribution in #621
- @DIvkov575 made their first contribution in #619
- @Catamantaloedis made their first contribution in #625
Full Changelog: https://github.com/rust-lang/log/compare/0.4.21...0.4.22
0.4.21 - 2024-02-27
- Minor clippy nits by @nyurik in #578
- Simplify Display impl by @nyurik in #579
- Set all crates to 2021 edition by @nyurik in #580
- Various changes based on review by @Thomasdezeeuw in #583
- Fix typo in file_static() method doc by @dimo414 in #590
- Specialize empty key value pairs by @EFanZh in #576
- Fix incorrect lifetime in Value::to_str() by @peterjoel in #587
- Remove some API of the key-value feature by @Thomasdezeeuw in #585
- Add logcontrol-log and log-reload by @swsnr in #595
- Add Serialization section to kv::Value docs by @Thomasdezeeuw in #593
- Rename Value::to_str to to_cow_str by @Thomasdezeeuw in #592
- Clarify documentation and simplify initialization of
STATIC_MAX_LEVEL
by @ptosi in #594 - Update docs to 2021 edition, test by @nyurik in #577
- Add "alterable_logger" link to README.md by @brummer-simon in #589
- Normalize line ending by @EFanZh in #602
- Remove
ok_or
in favor ofOption::ok_or
by @AngelicosPhosphoros in #607 - Use
Acquire
ordering for initialization check by @AngelicosPhosphoros in #610 - Get structured logging API ready for stabilization by @KodrAus in #613
- @nyurik made their first contribution in #578
- @dimo414 made their first contribution in #590
- @peterjoel made their first contribution in #587
- @ptosi made their first contribution in #594
- @brummer-simon made their first contribution in #589
- @AngelicosPhosphoros made their first contribution in #607
0.4.20 - 2023-07-11
- Remove rustversion dev-dependency by @Thomasdezeeuw in #568
- Remove
local_inner_macros
usage by @EFanZh in #570
0.4.19 - 2023-06-10
- Use target_has_atomic instead of the old atomic_cas cfg by @GuillaumeGomez in #555
- Put MSRV into Cargo.toml by @est31 in #557
0.4.18 - 2023-05-28
- fix Markdown links (again) by @hellow554 in #513
- add cargo doc to workflow by @hellow554 in #515
- Apply Clippy lints by @hellow554 in #516
- Replace ad-hoc eq_ignore_ascii_case with slice::eq_ignore_ascii_case by @glandium in #519
- fix up windows targets by @KodrAus in #528
- typo fix by @jiangying000 in #529
- Remove dependency on cfg_if by @EriKWDev in #536
- GitHub Workflows security hardening by @sashashura in #538
- Fix build status badge by @atouchet in #539
- Add call_logger to the documentation by @a1ecbr0wn in #547
- Use stable internals for key-value API by @KodrAus in #550
- Change wording of list of implementations by @Thomasdezeeuw in #553
- Add std-logger to list of implementations by @Thomasdezeeuw in #554
- Add
set_max_level_racy
and gateset_max_level
by @djkoloski in #544 - [doc] src/lib.rs : prefix an unused variable with an underscore by @OccupyMars2025 in #561
- [doc] src/macros.rs : correct grammar errors of an example in lib documentation by @OccupyMars2025 in #562
0.4.17 - 2022-04-29
- Update
kv_unstable
internal dependencies.
0.4.16 - 2022-03-22
- Fix a conflict with unqualified
Option
use in macros.
0.4.15 - 2022-02-23
- Silence a warning about the deprecated
spin_loop_hint
. - Relax ordering in the atomic
set_max_level
call. - Add thumbv4t-none-eabi to targets that don't support atomics
- Allow levels to be iterated over.
- Implement
Log
on some common wrapper types. - Improvements to test coverage.
- Improvements to documentation.
- Add key-value support to the
log!
macros. - Tighten
kv_unstable
internal dependencies, so they don't bump past their current alpha. - Add a simple visit API to
kv_unstable
. - Support
NonZero*
integers as values in structured logging - Support static strings as keys in structured logging
0.4.14 - 2021-01-27
- Remove the
__private_api_log_lit
special case. - Fixed incorrect combination of
kv_unstable
andstd
features causing compile failures. - Remove unstable
Value::to_*
conversions that were incorrectly usingas
. - Rename unstable
Value::to_error
toValue::to_borrowed_error
.
0.4.13 - 2021-01-11
- This is the same as
0.4.11
, except with akv_unstable_std
feature added to aid migrating current dependents to0.4.14
(which was originally going to be0.4.13
until it was decided to create a patch from0.4.11
to minimize disruption).
0.4.12 - 2020-12-24
- Support platforms without atomics by racing instead of failing to compile
- Implement
Log
forBox<T: Log>
- Update
cfg-if
to1.0
- Internal reworks of the structured logging API. Removed the
Fill
API and addedsource::as_map
andsource::as_list
to easily serialize aSource
as either a map of{key: value, ..}
or as a list of[(key, value), ..]
.
- Fixed deserialization of
LevelFilter
to use theiru64
index variants
0.4.11 - 2020-07-09
- Support coercing structured values into concrete types.
- Reference the
win_dbg_logger
in the readme.
- Updates a few deprecated items used internally.
- Fixed issues in docs and expands sections.
- Show the correct build badge in the readme.
- Fix up a possible inference breakage with structured value errors.
- Respect formatting flags in structured value formatting.
0.4.10 - 2019-12-16 (yanked)
- Fixed the
log!
macros, so they work in expression context (this regressed in0.4.9
, which has been yanked).
0.4.9 - 2019-12-12 (yanked)
This release bumps the minimum compiler version to 1.31.0
. This was mainly needed for cfg-if
,
but between 1.16.0
and 1.31.0
there are a lot of language and library improvements we now
take advantage of.
- Unstable support for capturing key-value pairs in a record using the
log!
macros
- Better documentation for max level filters.
- Internal updates to line up with bumped MSRV
0.4.8 - 2019-07-28
- Support attempting to get
Record
fields as static strings.
0.4.7 - 2019-07-06
- Support for embedded environments with thread-unsafe initialization.
- Initial unstable support for capturing structured data under the
kv_unstable
feature gate. This new API doesn't affect existing users and may change in future patches (so those changes may not appear in the changelog until it stabilizes).
- Docs for using
log
with the 2018 edition. - Error messages for macros missing arguments.
0.4.6 - 2018-10-27
- Support 2018-style macro import for the
log_enabled!
macro.
0.4.5 - 2018-09-03
- Make
log
's internal helper macros less likely to conflict with user-defined macros.
0.4.4 - 2018-08-17
- Support 2018-style imports of the log macros.
0.4.3 - 2018-06-29
- More code generation improvements.
0.4.2 - 2018-06-05
- Log invocations now generate less code.
- Example Logger implementations now properly set the max log level.
0.4.1 - 2017-12-30
- Some doc links were fixed.
0.4.0 - 2017-12-24
The changes in this release include cleanup of some obscure functionality and a more robust public API designed to support bridges to other logging systems, and provide more flexibility to new features in the future.
Vast portions of the Rust ecosystem use the 0.3.x release series of log, and we don't want to force the community to go through the pain of upgrading every crate to 0.4.x at the exact same time. Along with 0.4.0, we've published a new 0.3.9 release which acts as a "shim" over 0.4.0. This will allow crates using either version to coexist without losing messages from one side or the other.
There is one caveat - a log message generated by a crate using 0.4.x but consumed by a logging implementation using 0.3.x will not have a file name or module path. Applications affected by this can upgrade their logging implementations to one using 0.4.x to avoid losing this information. The other direction does not lose any information, fortunately!
TL;DR Libraries should feel comfortable upgrading to 0.4.0 without treating that as a breaking change. Applications may need to update their logging implementation (e.g. env-logger) to a newer version using log 0.4.x to avoid losing module and file information.
- The crate is now
no_std
by default. Level
andLevelFilter
now implementSerialize
andDeserialize
when theserde
feature is enabled.- The
Record
andMetadata
types can now be constructed by third-party code via a builder API. - The
logger
free function returns a reference to the logger implementation. This, along with the ability to constructRecord
s, makes it possible to bridge from another logging framework to this one without digging into the private internals of the crate. The standarderror!
warn!
, etc., macros now exclusively use the public API of the crate rather than "secret" internal APIs. Log::flush
has been added to allow crates to tell the logging implementation to ensure that all "in flight" log events have been persisted. This can be used, for example, just before an application exits to ensure that asynchronous log sinks finish their work.
- The
shutdown
andshutdown_raw
functions have been removed. Supporting shutdown significantly complicated the implementation and imposed a performance cost on each logging operation. - The
log_panics
function and its associatednightly
Cargo feature have been removed. Use the log-panics instead.
- The
Log
prefix has been removed from type names. For example,LogLevelFilter
is nowLevelFilter
, andLogRecord
is nowRecord
. - The
MaxLogLevelFilter
object has been removed in favor of aset_max_level
free function. - The
set_logger
free functions have been restructured. The logger is now directly passed to the functions rather than a closure which returns the logger.set_logger
now takes a&'static Log
and is usable inno_std
contexts in place of the oldset_logger_raw
.set_boxed_logger
is a convenience function which takes aBox<Log>
but otherwise acts likeset_logger
. It requires thestd
feature. - The
file
andmodule_path
values inRecord
no longer have the'static
lifetime to support integration with other logging frameworks that don't provide a'static
lifetime for the equivalent values. - The
file
,line
, andmodule_path
values inRecord
are nowOption
s to support integration with other logging frameworks that don't provide those values.
- We're looking to add support for structured logging - the inclusion of extra key-value pairs of information in a log event in addition to the normal string message. This should be able to be added in a backwards compatible manner to the 0.4.x series when the design is worked out.
Look at the release tags for information about older releases.