Change8

25.4.0

Breaking Changes
📦 structlogView on GitHub →
1 breaking2 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

  1. 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.
  2. 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.

Affected Symbols