Skip to content

25.5.0

Latest

Choose a tag to compare

@hynek hynek released this 27 Oct 08:27
· 56 commits to main since this release
25.5.0
c0ef9e0

Highlights

Huge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of structlog.dev.ConsoleRenderer. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (cr = ConsoleRenderer.get_active()). This allows you, for example, to disable Rich exception formatting as easily as structlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback. Please check out the updated docs!

Full changelog below!

Special Thanks

This release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If you would like to join them, go to https://github.com/sponsors/hynek and check out the sweet perks!

Above and Beyond

Variomedia AG (@variomedia), Tidelift (@tidelift), thanks.dev (@thnxdev), Privacy Solutions GmbH (@privacy-solutions), Quesma (@QuesmaOrg), FilePreviews (@filepreviews), LambdaTest (@LambdaTest-Inc), Doist (@Doist), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).

Maintenance Sustainers

Buttondown (@buttondown), Jeff McCarrell (@jmccarrell), Christopher Dignam (@chdsbd), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), Polar (@polarsource), Mike Fiedler (@miketheman), Duncan Hill (@cricalix), Colin Marquardt (@cmarqu), Pieter Swinkels (@swinkels), Nick Libertini (@libertininick), Brian M. Dennis (@crossjam), Celebrity News AG (@celebritynewsag), The Westervelt Company (@westerveltco), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Thomas Klinger (@thmsklngr), Andreas Poehlmann (@ap--), August Trapper Bigelow (@atbigelow), Carlton Gibson (@carltongibson), Roboflow (@roboflow), and Jeff McCarrell (@jmccarrell).

Full Changelog

Deprecated

  • structlog.dev.ConsoleRenderer()'s pad_event argument has been renamed to pad_event_to to differentiate it from the boolean pad_level argument. pad_event is now deprecated.

Added

  • Added structlog.dev.ConsoleRenderer.get_active() that returns the currently active structlog.dev.ConsoleRenderer(). #749

  • structlog.dev.ConsoleRenderer() now supports setting the exception_formatter attribute.

    You can now disable the pretty-printing of exceptions by setting it to structlog.dev.plain_traceback:

    cr = structlog.dev.ConsoleRenderer.get_active()
    cr.exception_formatter = structlog.dev.plain_traceback

    Same goes for sort_keys, columns, colors, force_colors, level_styles, pad_event_to, event_key, timestamp_key, and repr_native_str.

    #749 #756 #757 #759

  • Added structlog.dev.ConsoleRenderer.get_default_column_styles() for reuse the default column styles. #741

  • structlog.testing.capture_logs() now optionally accepts processors to apply before capture. #728

  • structlog.dev.RichTracebackFormatter now exposes the upstream code_width parameter. Default width is now None for full terminal width. Full terminal width is now handled by Rich itself, bringing support for reflow and COLUMN environment variable. Passing -1 for width is now deprecated and automatically replaced by None. #717

  • Native loggers now allow the passing of a dictionary for dictionary-based interpolation log.info("hello %(name)s!", {"name": "world"}). #748

  • On Python 3.11+, structlog.processors.CallsiteParameterAdder now supports CallsiteParameter.QUAL_NAME that adds the qualified name of the callsite, including scope and class names. This is only available for structlog-originated events since the standard library has no equivalent.

  • structlog.stdlib.LoggerFactory now supports the stacklevel parameter. #763

Changed

  • structlog.dev.rich_traceback() now throws a more helpful error when Rich is missing. #735

Fixed

  • structlog.processors.MaybeTimeStamper now respects the key argument when determining whether to overwrite the timestamp field. #747

  • structlog.tracebacks.extract() no longer raises a RecursionError when the cause chain of an exception contains itself. #739

  • Default config now respects FORCE_COLOR on Windows. #758


This release contains contributions from @agunnerson-elastic, @HairlessVillager, @hynek, @l1nd3r0th, @leonardo-panseri, and @noirbizarre.

Artifact Attestations

You can verify this release's artifact attestions using GitHub's CLI tool by downloading the sdist and wheel from PyPI and running:

$ gh attestation verify --owner hynek structlog-25.5.0.tar.gz

and

$ gh attestation verify --owner hynek structlog-25.5.0-py3-none-any.whl