NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #28 most downloaded on crates.io
A lightweight logging facade for Rust
Last release 1 months ago
22 Aug 2026
Ships fairly regularly
a new release about every 3 months
Some releases are documented
notes for 30 of 57 stable releases
6 versions withdrawn
withdrawn after publishing
12 years old
64 releases · first in 2014
doc: Add context-logger utility to README by @alekseysidorov in #735
Full Changelog: 0.4.33...0.4.34
Fixed key comparison by @matteo-zeggiotti-ok in #732
One column per quarter.
Full Changelog: 0.4.32...0.4.33
Support Value -> string conversions with kv + std features instead of kv_std by @tisonkun in #729
Value -> string conversions with kv + std features instead of kv_std by @tisonkun in #729Full Changelog: 0.4.31...0.4.32
Value -> string conversions with kv + std features instead of kv_std by @tisonkun in https://github.com/rust-lang/log/pull/729Full Changelog: https://github.com/rust-lang/log/compare/0.4.31...0.4.32
fix typos in kv compile errors and log documentation by @Isvane in #726
Full Changelog: https://github.com/rust-lang/log/compare/0.4.30...0.4.31
Support capturing of std::net types by @KodrAus in #724
Full Changelog: 0.4.29...0.4.30
std::net types by @KodrAus in https://github.com/rust-lang/log/pull/724Full Changelog: https://github.com/rust-lang/log/compare/0.4.29...0.4.30
This release increases log 's MSRV from 1.61.0 to 1.68.0 .
This release increases log's MSRV from 1.61.0 to 1.68.0.
Level and LevelFilter by @dishmaker in #709Full Changelog: 0.4.28...0.4.29
Level and LevelFilter by @dishmaker in https://github.com/rust-lang/log/pull/709Full Changelog: https://github.com/rust-lang/log/compare/0.4.28...0.4.29
ci: drop really old trick and ensure MSRV for all feature combo by @tisonkun in #676
#[derive(Debug)] in example by @ZylosLumen in #688increment_severity() and decrement_severity() methods for Level and LevelFilter by @nebkor in #692Full Changelog: 0.4.27...0.4.28
A few minor lint fixes by @nyurik in #671
Full Changelog: 0.4.26...0.4.27
Full Changelog: https://github.com/rust-lang/log/compare/0.4.26...0.4.27
Derive Clone for kv::Value by @SpriteOvO in #668
Clone for kv::Value by @SpriteOvO in #668spdlog-rs link to crate doc by @SpriteOvO in #669Full Changelog: 0.4.25...0.4.26
Clone for kv::Value by @SpriteOvO in https://github.com/rust-lang/log/pull/668spdlog-rs link to crate doc by @SpriteOvO in https://github.com/rust-lang/log/pull/669Full Changelog: https://github.com/rust-lang/log/compare/0.4.25...0.4.26
Revert loosening of kv cargo features by @KodrAus in #662
Full Changelog: 0.4.24...0.4.25
Full Changelog: https://github.com/rust-lang/log/compare/0.4.24...0.4.25
Fix up kv feature activation by @KodrAus in https://github.com/rust-lang/log/pull/659
Full Changelog: https://github.com/rust-lang/log/compare/0.4.23...0.4.24
Fix some typos by @Kleinmarb in https://github.com/rust-lang/log/pull/637
spdlog-rs link to README by @SpriteOvO in https://github.com/rust-lang/log/pull/639Full Changelog: https://github.com/rust-lang/log/compare/0.4.22...0.4.23
Replace deprecated std::atomic::spin_loop_hint() by @Catamantaloedis in https://github.com/rust-lang/log/pull/625
colog crate by @chrivers in https://github.com/rust-lang/log/pull/621Full Changelog: https://github.com/rust-lang/log/compare/0.4.21...0.4.22
Minor clippy nits by @nyurik in https://github.com/rust-lang/log/pull/578
STATIC_MAX_LEVEL by @ptosi in https://github.com/rust-lang/log/pull/594ok_or in favor of Option::ok_or by @AngelicosPhosphoros in https://github.com/rust-lang/log/pull/607Acquire ordering for initialization check by @AngelicosPhosphoros in https://github.com/rust-lang/log/pull/610Remove rustversion dev-dependency by @Thomasdezeeuw in https://github.com/rust-lang/log/pull/568
local_inner_macros usage by @EFanZh in https://github.com/rust-lang/log/pull/570Use target_has_atomic instead of the old atomic_cas cfg by @GuillaumeGomez in https://github.com/rust-lang/log/pull/555
fix Markdown links (again) by @hellow554 in https://github.com/rust-lang/log/pull/513
set_max_level_racy and gate set_max_level by @djkoloski in https://github.com/rust-lang/log/pull/544Update kv_unstable internal dependencies.
kv_unstable internal dependencies.Fix a conflict with unqualified Option use in macros.
Option use in macros.Silence a warning about the deprecated spin_loop_hint.
spin_loop_hint.set_max_level call.Log on some common wrapper types.log! macros.kv_unstable internal dependencies, so they don't bump past their current alpha.kv_unstable.NonZero* integers as values in structured loggingRemove the __private_api_log_lit special case.
__private_api_log_lit special case.kv_unstable and std features causing compile failures.Value::to_* conversions that were incorrectly using as.Value::to_error to Value::to_borrowed_error.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 b
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).Support platforms without atomics by racing instead of failing to compile
Log for Box<T: Log>cfg-if to 1.0Fill API
and added source::as_map and source::as_list to easily serialize a Source
as either a map of {key: value, ..} or as a list of [(key, value), ..].LevelFilter to use their u64 index variantsUpdates a few deprecated items used internally.
win_dbg_logger in the readme.Fixed the log! macros, so they work in expression context (this regressed in 0.4.9, which has been yanked).
log! macros, so they work in expression context (this regressed in 0.4.9, which has been 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 languag
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.
log! macrosSupport attempting to get Record fields as static strings.
Record fields as static strings.Support for embedded environments with thread-unsafe initialization.
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).log with the 2018 edition.Support 2018-style macro import for the log_enabled! macro.
log_enabled! macro.Make log's internal helper macros less likely to conflict with user-defined macros.
log's internal helper macros less likely to conflict with user-defined
macros.Support 2018-style imports of the log macros.
More code generation improvements.
Log invocations now generate less code.
### Fixed * Some doc links were fixed.
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 i…
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.
no_std by default.Level and LevelFilter now implement Serialize and Deserialize when the serde feature is
enabled.Record and Metadata types can now be constructed by third-party code via a builder API.logger free function returns a reference to the logger implementation. This, along with the
ability to construct Records, makes it possible to bridge from another logging framework to
this one without digging into the private internals of the crate. The standard error! 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.shutdown and shutdown_raw functions have been removed. Supporting shutdown significantly
complicated the implementation and imposed a performance cost on each logging operation.log_panics function and its associated nightly Cargo feature have been removed. Use the
log-panics instead.Log prefix has been removed from type names. For example, LogLevelFilter is now
LevelFilter, and LogRecord is now Record.MaxLogLevelFilter object has been removed in favor of a set_max_level free function.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 in no_std contexts in place of the old set_logger_raw. set_boxed_logger
is a convenience function which takes a Box<Log> but otherwise acts like set_logger. It
requires the std feature.file and module_path values in Record no longer have the 'static lifetime to support
integration with other logging frameworks that don't provide a 'static lifetime for the
equivalent values.file, line, and module_path values in Record are now Options to support integration
with other logging frameworks that don't provide those values.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →