This release focuses on substantial performance improvements, concurrency correctness, and better interoperability with modern Go logging APIs.
🚀 Performance
Major improvements across TextFormatter, entry handling, and common logger paths:
~17% lower geomean runtime across the benchmark suite
~27% higher geomean formatter throughput
Common enabled logging paths are ~30–44% faster
WithError is ~40% faster
Chained fields are ~46% faster
TextFormatter paths are up to ~40% faster
Allocation counts are reduced by ~25–74% across measured TextFormatter cases, with the largest reductions in colored output
The improvements also show up in complete logger paths:
Logger + TextFormatter is ~31% faster, with ~24% fewer allocations
Logger + JSONFormatter is ~21% faster, with ~10% fewer allocations
JSONFormatter itself remains largely unchanged in runtime performance, with small allocation reductions.
🔄 log/slog interoperability
v1.10 adds bidirectional interoperability between Logrus and Go's log/slog:
A Logrus slog hook can forward existing Logrus entries to an slog logger.
hooks/slog.NewHandler implements slog.Handler, allowing log/slog records to use an existing Logrus logger and its hooks, formatter, and output.
The handler preserves levels, fields, groups, context, record timestamps, and optionally caller information.
Caller reporting is configured per handler, without requiring Logrus's logger-wide ReportCaller option.
Custom slog levels can be mapped to Logrus levels.
The hook and handler can be combined, providing a practical path for incrementally migrating from Logrus to log/slog without requiring an all-at-once transition.
This allows applications to migrate their logging API and logging backend independently: existing Logrus call sites can start using an slog backend, while new slog code can continue using an established Logrus setup.
🔒 Concurrency & Correctness
Fix reentrant logging deadlocks, including logging from within MarshalJSON or formatter code.
Fix generic Log, Logf, Logln, and LogFn methods unexpectedly panicking when called with PanicLevel, contrary to their documented behavior.
Eliminate race conditions in entry and formatter paths.
Improve locking boundaries around formatters and hooks.
➕ Added
TextFormatter now automatically enables colors on Windows terminals with ANSI support, matching behavior on other platforms.
Entry.Caller can now be set explicitly and is preserved across derived entries. When caller reporting is enabled, Logrus only detects and populates caller information when none was provided, allowing custom caller detection and wrapper-aware logging without adding additional caller configuration APIs.
Add minimal, composable logging interfaces for each log level, allowing consumers to depend on narrower interfaces and making logging implementations easier to substitute or adapt.
Expand CI verification to include TinyGo and every cross-compile target reported by go tool dist list, improving coverage across alternative toolchains and platforms.
⚠️ Behavioral Changes
Minimum supported Go version is now 1.23.
TextFormatter now renders []byte as raw/quoted strings instead of numeric slices.
If you relied on the previous slice-of-ints output, convert explicitly before logging.
TextFormatter now uses dim cyan for debug output and dim white for trace output in colorized TTY output.
Entry.HasCaller is now deprecated in favor of checking Entry.Caller directly. A //go:fix inline directive was added so existing uses can be updated automatically.
MutexWrap, which was unintentionally exposed as public API, is deprecated. It remains available as an alias for compatibility but should not be used directly.
v1.10 is primarily a performance, correctness, and interoperability release with no intentional breaking public API changes.
Benchmarks (sampled at 457e372460c7a80ca7c800b51ebeee5362aaa180)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
Release Notes
sirupsen/logrus (github.com/sirupsen/logrus)v1.10.0
Compare Source
Logrus v1.10.0
This release focuses on substantial performance improvements, concurrency correctness, and better interoperability with modern Go logging APIs.
🚀 Performance
Major improvements across TextFormatter, entry handling, and common logger paths:
The improvements also show up in complete logger paths:
JSONFormatter itself remains largely unchanged in runtime performance, with small allocation reductions.
🔄 log/slog interoperability
v1.10 adds bidirectional interoperability between Logrus and Go's log/slog:
This allows applications to migrate their logging API and logging backend independently: existing Logrus call sites can start using an slog backend, while new slog code can continue using an established Logrus setup.
🔒 Concurrency & Correctness
➕ Added
⚠️ Behavioral Changes
If you relied on the previous slice-of-ints output, convert explicitly before logging.
v1.10 is primarily a performance, correctness, and interoperability release with no intentional breaking public API changes.
Benchmarks (sampled at 457e372460c7a80ca7c800b51ebeee5362aaa180)Full Changelog: sirupsen/logrus@v1.9.4...v1.10.0
stretchr/testify (github.com/stretchr/testify)v1.12.0
Compare Source
What's Changed
Functional Changes
Fixes
Documentation, Build & CI
New Contributors
Full Changelog: stretchr/testify@v1.11.0...v1.12.0
What's Changed
New Contributors
Full Changelog: stretchr/testify@v1.11.0...v1.12.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.