# What changed in structlog

> 35 changes in structlog 25 to 26 from its official release notes, upgrade guides and advisories: 2 breaking, 2 deprecations, 15 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/pypi/structlog/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## structlog 26

### Breaking changes

- Support for Python 3.8 and 3.9 was removed. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)

### Deprecations

- Support for better-exceptions is deprecated and will be removed within a year; use the Rich integration or copy-paste the suggested one line of code. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)

### New APIs and options

- Adds a name attribute, allowing use with the structlog.stdlib.add_logger_name() processor without the standard library integration. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- Adds Rich-based monochrome exception rendering, supported throughout ConsoleRenderer when the user asks for no colors. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- Adds the qualified import name of the callsite module, or __main__ for the entry point; this is available only for structlog-originated events. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- Adds the snake_case alias get_effective_level() for getEffectiveLevel(), improving compatibility with FilteringBoundLogger and allowing configurations to be swapped without changing call sites. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- Adds the snake_case alias is_enabled_for() for isEnabledFor(), improving compatibility with FilteringBoundLogger and allowing configurations to be swapped without changing call sites. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)

### Behavior and default changes

- No longer warns when the exception key has a rendered value despite a fancy formatter being configured. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)

### Fixes and other changes

- Python 3.15 support was added. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- These loggers now hold weak references to output files, preventing file leakage in long-running processes that open many logfiles. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- For async log methods, reports the calling thread's id and name instead of those of the executor-pool thread running the underlying synchronous logger. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)
- WriteLogger is usable after unpickling. (26.1.0) — [release notes](https://github.com/hynek/structlog/releases/tag/26.1.0)

## structlog 25

### Breaking changes

- Renamed the pad_event argument to pad_event_to to distinguish it from the boolean pad_level argument. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)

### Deprecations

- The pad_event argument is deprecated; use pad_event_to to distinguish it from the boolean pad_level argument. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)

### New APIs and options

- Native loggers now accept a dictionary for dictionary-based interpolation. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set, allowing developers to change exception formatting, including disabling pretty-printing. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- Added get_active() to retrieve the currently active ConsoleRenderer instance. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- Added a method to reuse the default column styles. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- Exposes Rich's upstream code_width parameter. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- On Python 3.11+, QUAL_NAME adds the qualified name of a structlog-originated callsite, including scope and class names. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- LoggerFactory now supports the stacklevel parameter. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- capture_logs() optionally accepts processors to apply before capture. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)

### Fixes and other changes

- Default configuration now respects FORCE_COLOR on Windows. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- The attribute can now be set on the active renderer. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- Raises a more helpful error when Rich is missing. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- Respects the key argument when determining whether to overwrite the timestamp field. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
- No longer raises RecursionError when an exception cause chain contains itself. (25.5.0) — [release notes](https://github.com/hynek/structlog/releases/tag/25.5.0)
