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)
In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):
The go directive was updated for compatibility reasons
Details:
Package
Change
go
1.20 -> 1.23
### ℹ️ Artifact update notice
##### File name: go.mod
In order to perform the update(s) described in the table above, Renovate ran the `go get` command, which resulted in the following additional change(s):
- The `go` directive was updated for compatibility reasons
Details:
| **Package** | **Change** |
| :---------- | :--------------- |
| `go` | `1.20` -> `1.23` |
CSRBot
merged commit b08783f9f9 into master2026-08-13 20:16:14 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
v1.9.4→v1.10.0Release Notes
sirupsen/logrus (github.com/sirupsen/logrus)
v1.10.0Compare 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:WithErroris ~40% fasterTextFormatterpaths are up to ~40% fasterTextFormattercases, with the largest reductions in colored outputThe improvements also show up in complete logger paths:
TextFormatteris ~31% faster, with ~24% fewer allocationsJSONFormatteris ~21% faster, with ~10% fewer allocationsJSONFormatteritself remains largely unchanged in runtime performance, with small allocation reductions.🔄
log/sloginteroperabilityv1.10 adds bidirectional interoperability between Logrus and Go's
log/slog:sloghook can forward existing Logrus entries to ansloglogger.hooks/slog.NewHandlerimplementsslog.Handler, allowinglog/slogrecords to use an existing Logrus logger and its hooks, formatter, and output.ReportCalleroption.sloglevels can be mapped to Logrus levels.log/slogwithout 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
slogbackend, while newslogcode can continue using an established Logrus setup.🔒 Concurrency & Correctness
MarshalJSONor formatter code.Log,Logf,Logln, andLogFnmethods unexpectedly panicking when called withPanicLevel, contrary to their documented behavior.➕ Added
TextFormatternow automatically enables colors on Windows terminals with ANSI support, matching behavior on other platforms.Entry.Callercan 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.⚠️ Behavioral Changes
TextFormatternow renders[]byteas raw/quoted strings instead of numeric slices.If you relied on the previous slice-of-ints output, convert explicitly before logging.
TextFormatternow uses dim cyan for debug output and dim white for trace output in colorized TTY output.Entry.HasCalleris now deprecated in favor of checkingEntry.Callerdirectly. A//go:fix inlinedirective 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)
Full Changelog: https://github.com/sirupsen/logrus/compare/v1.9.4...v1.10.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
ℹ️ Artifact update notice
File name: go.mod
In order to perform the update(s) described in the table above, Renovate ran the
go getcommand, which resulted in the following additional change(s):godirective was updated for compatibility reasonsDetails:
go1.20->1.23