25.4.0
Breaking Changes📦 structlogView on GitHub →
⚠ 1 breaking✨ 2 features🐛 1 fixes🔧 3 symbols
Summary
Version 25.4.0 adds Python 3.13.4/3.14 support and exception‑group handling, fixes ExceptionPrettyPrinter formatting, and introduces a breaking change for `filter_by_level()` on the new Python releases.
⚠️ Breaking Changes
- Python 3.13.4 (and backported to 3.14) changes `logging.Logger.isEnabledFor()` to always return False while a log entry is in flight, which breaks `structlog.stdlib.filter_by_level()`. Upgrade structlog to this release before upgrading Python to avoid loss of log filtering.
Migration Steps
- If your code uses `structlog.stdlib.filter_by_level()`, upgrade to structlog 25.4.0 before upgrading to Python 3.13.4 or 3.14.
- No code changes required for the new exception‑group support; the new fields are added to `structlog.tracebacks.Stack`.
✨ New Features
- Added support for Python 3.14 and Python 3.13.4.
- `structlog.tracebacks` now handles exception groups. `structlog.tracebacks.Stack` includes new fields `is_group: bool` and `exceptions: list[Trace]`.
🐛 Bug Fixes
- `structlog.processors.ExceptionPrettyPrinter` now respects the `exception_formatter` arguments instead of always using the default formatter.