Releases: hynek/structlog
25.5.0
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 activestructlog.dev.ConsoleRenderer(). #749 -
structlog.dev.ConsoleRenderer()now supports setting theexception_formatterattribute.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.
-
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.RichTracebackFormatternow exposes the upstream code_width parameter. Default width is nowNonefor full terminal width. Full terminal width is now handled by Rich itself, bringing support for reflow andCOLUMNenvironment variable. Passing-1for width is now deprecated and automatically replaced byNone. #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.CallsiteParameterAddernow supportsCallsiteParameter.QUAL_NAMEthat 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.LoggerFactorynow supports the stacklevel parameter. #763
Changed
structlog.dev.rich_traceback()now throws a more helpful error when Rich is missing. #735
Fixed
-
structlog.processors.MaybeTimeStampernow respects the key argument when determining whether to overwrite the timestamp field. #747 -
structlog.tracebacks.extract()no longer raises aRecursionErrorwhen the cause chain of an exception contains itself. #739 -
Default config now respects
FORCE_COLORon 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.gzand
$ gh attestation verify --owner hynek structlog-25.5.0-py3-none-any.whl25.4.0
Highlights
The main feature is support for exception groups we stole adapted from Rich, however the main reason for this release at this point in time are backwards-incompatible changes in the upcoming Python 3.13.4. Update structlog before updating Python, if you use structlog.stdlib.filter_by_level().
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), Klaviyo (@klaviyo), Privacy Solutions GmbH (@privacy-solutions), FilePreviews (@filepreviews), Doist (@Doist), nate nowack (@zzstoatzz), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Buttondown (@buttondown), 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), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), 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), and Roboflow (@roboflow).
Not to forget 14 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
-
Support for Python 3.14 and Python 3.13.4.
Python 3.14 has an backwards-incompatible change to
logging.Logger.isEnabledFor()(it now always returns False if a log entry is in flight) that has been backported to 3.13.4 (expected on 2025-06-03). It mainly affectsstructlog.stdlib.filter_by_level(). #723 -
structlog.tracebacksnow handles exception groups.structlog.tracebacks.Stackhas two new fields,is_group: boolandexceptions: list[Trace]. This works similarly to what Rich v14.0.0 does. #720
Fixed
structlog.processors.ExceptionPrettyPrinternow respects the exception_formatter arguments instead of always using the default formatter. #724
This release contains contributions from @anujdas, @hynek, and @sscherfke.
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.4.0.tar.gzand
$ gh attestation verify --owner hynek structlog-25.4.0-py3-none-any.whl25.3.0
Highlights
This fixes a rather ugly bug where seemingly UTC timestamps in TimeStamper had the timestamp from the local timezone when passing utc=True.
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), Klaviyo (@klaviyo), Privacy Solutions GmbH (@privacy-solutions), Andreas Jung (@zopyx), Ecosystems (@ecosyste-ms), FilePreviews (@filepreviews), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Buttondown (@buttondown), 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), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), 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), and Roboflow (@roboflow).
Not to forget 15 more amazing humans who chose to be generous but anonymous!
Full Changelog
Fixed
structlog.processors.TimeStampernow again uses timestamps using UTC for custom format strings whenutc=True. #713
This release contains contributions from @hynek, and @m-endra.
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.3.0.tar.gzand
$ gh attestation verify --owner hynek structlog-25.3.0-py3-none-any.whl25.2.0
Highlights
Quick release before my travel frenzy! It seems like the boring fix to type hints of bind() et al is a fan favorite, though.
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), Ecosystems (@ecosyste-ms), Klaviyo (@klaviyo), Privacy Solutions GmbH (@privacy-solutions), FilePreviews (@filepreviews), nate nowack (@zzstoatzz), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Buttondown (@buttondown), 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), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), 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), and Roboflow (@roboflow).
Not to forget 14 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
structlog.tracebacks.Stacknow includes anexc_notesfield reflecting the notes attached to the exception. #684
Changed
-
structlog.stdlib.BoundLogger's binding-related methods now also returnSelf. #694 -
structlog.processors.TimeStampernow produces internally timezone-awaredatetimeobjects. Default output hasn't changed, but you can now use%zin your fmt string. #709
Fixed
- Expose
structlog.dev.RichTracebackFormatterfor imports. #699 - Expose
structlog.processors.LogfmtRendererfor imports. #701
This release contains contributions from @camillol, @hynek, @k4nar, @keongalvin, and @ttrei.
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.2.0.tar.gzand
$ gh attestation verify --owner hynek structlog-25.2.0-py3-none-any.whl25.1.0
Highlights
Lots of updates to exception handling that I hope will stabilize a bit now.
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), Klaviyo (@klaviyo), FilePreviews (@filepreviews), Privacy Solutions GmbH (@privacy-solutions), Gedankenspieler (@Gedankenspieler), Daniel Fortunov (@asqui), Kevin P. Fleming (@kpfleming), and Polar (@polarsource).
Maintenance Sustainers
Buttondown (@buttondown), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), Chris Withers (@cjw296), Mike Fiedler (@miketheman), Duncan Hill (@cricalix), Colin Marquardt (@cmarqu), Pieter Swinkels (@swinkels), Nick Libertini (@libertininick), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), The Westervelt Company (@westerveltco), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Thomas Klinger (@thmsklngr), Andreas Poehlmann (@ap--), August Bigelow (@atbigelow), Carlton Gibson (@carltongibson), and Roboflow (@roboflow).
Not to forget 11 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
-
Add
structlog.stdlib.render_to_log_args_and_kwargsprocessor. Same asstructlog.stdlib.render_to_log_kwargs, but also allows to pass positional arguments tologging. With it, you do not need to addstructlog.stdlib.PositionalArgumentsFormatterprocessor to format positional arguments from structlog loggers. #668 -
Native loggers now have
is_enabled_for()andget_effective_level()methods that mirror the behavior of the standard library'slogging.Logger.isEnabledFor()andlogging.Logger.getEffectiveLevel(). #689
Changed
-
structlog.typing.BindableLoggerprotocol now returnsSelfinstead ofBindableLogger. This adds a dependency on typing-extensions for Pythons older than 3.11. #642 #659 -
structlog.dev.ConsoleRendererwill quote string value with special characters. #647 -
structlog.stdlib.recreate_defaults()now also addsstructlog.stdlib.PositionalArgumentsFormatter. In default native mode, this is done by the loggers at the edge. -
structlog.make_filtering_bound_logger()now also accepts a string for min_level.
Fixed
-
Fix handling calls to
{logger}.exception()outside of exception blocks. Depending on the structlog configuration, this either resulted in an event dict keyexception: "MISSING"or lead to an error. Now, an invalid or missingexc_infowill just be ignored. This means, that calling{logger}.exception()outside of an exception block is basically the same as calling{logger}.error(). #634 #680 -
Instantiating
structlog.dev.ConsoleRendererdoes not mutate the passed styles dict anymore. #669 -
The native
FilteringBoundLogger.fatal()method now maps to the critical level, as it does in the standard library. Note that the level is discouraged to use there, so we recommend to stick toerror()orcritical(). #677 -
structlog.tracebacks.ExceptionDictTransformernow actually acceptsNoneforlocals_max_lengthandlocals_max_string. #675
This release contains contributions from @aThorp96, @brcsw, @denis-savran, @emmanuel-ferdman, @hynek, @kain88-de, @Sh4pe, @sscherfke, @Tinche, @trim21, and @yaelmi3.
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.1.0.tar.gzand
$ gh attestation verify --owner hynek structlog-25.1.0-py3-none-any.whl24.4.0
Highlights
This is just a docs / PyPI README update. No code changes whatsoever.
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), FilePreviews (@filepreviews), Klaviyo (@klaviyo), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Adam Hill (@adamghill), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), The Westervelt Company (@westerveltco), Philippe Galvan (@PhilippeGalvan), Birk Jernström (@birkjernstrom), Chris Withers (@cjw296), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Mike Fiedler (@miketheman), Thomas Klinger (@thmsklngr), Duncan Hill (@cricalix), and Colin Marquardt (@cmarqu).
Not to forget 7 more amazing humans who chose to be generous but anonymous!
Full Changelog
Changed
No code changes since 24.3.0
Artifact Attestations
You can verify this release's artififact attestions using GitHub's CLI tool by downloading the sdist and wheel from PyPI and running:
$ gh attestation verify --owner hynek structlog-24.4.0.tar.gzand
$ gh attestation verify --owner hynek structlog-24.4.0-py3-none-any.whl24.3.0
Highlights
This is just a quick release so I can focus on my other projects. But do enjoy the improved traceback dict rendering and log level handling in testing!
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), FilePreviews (@filepreviews), Klaviyo (@klaviyo), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Adam Hill (@adamghill), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), The Westervelt Company (@westerveltco), Philippe Galvan (@PhilippeGalvan), Birk Jernström (@birkjernstrom), Chris Withers (@cjw296), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Mike Fiedler (@miketheman), Thomas Klinger (@thmsklngr), Duncan Hill (@cricalix), and Colin Marquardt (@cmarqu).
Not to forget 7 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
-
Restore feature parity between
structlog.traceback.ExceptionDictTransformerand Rich's traceback extractor:- When displaying locals, use Rich for formatting if it is available.
- When displaying locals, call
repr()on strings, too (improves handling ofSecretStrimplementations). - Add
locals_max_lengthconfig option - Add
locals_hide_sunderconfig option - Add
locals_hide_dunderconfig option - Add
suppressconfig option
Changed
structlog.testing.capture_logs()now maps theexceptionlog level toerror(as it's elsewhere). #628
24.2.0
Highlights
Overdue, and mostly bug fixes & optimizations! See y'all after my vacation. 🌴
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), FilePreviews (@filepreviews), Klaviyo (@klaviyo), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Adam Hill (@adamghill), Dan Groshev (@si14), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), The Westervelt Company (@westerveltco), Philippe Galvan (@PhilippeGalvan), Birk Jernström (@birkjernstrom), Chris Withers (@cjw296), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), Mike Fiedler (@miketheman), Thomas Klinger (@thmsklngr), Duncan Hill (@cricalix), and Colin Marquardt (@cmarqu).
Not to forget 7 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
-
It is now possible to disable log level-padding in
structlog.dev.LogLevelColumnFormatterandstructlog.dev.ConsoleRenderer. #599 -
The
structlog.processors.CallsiteParameterAddercan now be pickled. #603 -
structlog.processors.CallsiteParameterAddernow also works withstructlog.stdlib.BoundLogger's non-standard async methods (ainfo(), and so forth) #618
Changed
-
structlog.processors.LogfmtRenderernow escapes newlines. #592 -
structlog.processors.LogfmtRenderernow escapes backslashes and double quotes. #594 -
structlog.processors.CallsiteParameterAdderhas been optimized to be about 2x faster. #606
Fixed
structlog.stdlib.render_to_log_kwargsnow correctly passes stacklevel as a kwarg to stdlib logging. #619
24.1.0
Highlights
This quick bugfix release fixes two regressions and the fact that RichTracebackFormatter has been ignoring its width argument the whole time.
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), FilePreviews (@filepreviews), Daniel Fortunov (@asqui), Kevin P. Fleming (@kpfleming), and Sören Weber (@SoerenWeber).
Maintenance Sustainers
Adam Hill (@adamghill), Dan Groshev (@si14), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), Ionel Cristian Mărieș (@ionelmc), The Westervelt Company (@westerveltco), Philippe Galvan (@PhilippeGalvan), Birk Jernström (@birkjernstrom), Tim Schilling (@tim-schilling), Chris Withers (@cjw296), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), and Mike Fiedler (@miketheman).
Not to forget 6 more amazing humans who chose to be generous but anonymous!
Full Changelog
Fixed
-
The lazy logger proxy returned by
structlog.get_logger()now returns its initial values when asked for context. When asked for context before binding for the first time, it returned an empty dictionary in 23.3.0. -
The displayed level name when using
structlog.stdlib.BoundLogger.exception()is"error"instead of"exception". Fixes regression in 23.3.0. #584 -
Don't ignore the
widthargument ofRichTracebackFormatter. #587
23.3.0
Highlights
The highlight is the configurability of structlog.dev.ConsoleRenderer's output (check out https://www.structlog.org/en/stable/console-output.html#console-output-configuration!) and structlog.processors.CallsiteParameterAdder getting asyncio support.
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), FilePreviews (@filepreviews), Daniel Fortunov (@asqui), and Kevin P. Fleming (@kpfleming).
Maintenance Sustainers
Adam Hill (@adamghill), Dan Groshev (@si14), Magnus Watn (@magnuswatn), David Cramer (@dcramer), Moving Content AG (@moving-content), ProteinQure (@ProteinQure), Jesse Snyder (@jessesnyder), Rivo Laks (@rivol), Ionel Cristian Mărieș (@ionelmc), The Westervelt Company (@westerveltco), Philippe Galvan (@PhilippeGalvan), Birk Jernström (@birkjernstrom), Tim Schilling (@tim-schilling), Chris Withers (@cjw296), Christopher Dignam (@chdsbd), Stefan Hagen (@sthagen), Sławomir Ehlert (@slafs), Mostafa Khalil (@khadrawy), Filip Mularczyk (@mukiblejlok), and Mike Fiedler (@miketheman).
Not to forget 6 more amazing humans who chose to be generous but anonymous!
Full Changelog
Added
-
The colorful development logger is now even more configurable! Choose freely your colors and the order of the key-value pairs! Implement your own formatters for certain keys!
Implementing the output on top of the new columns API has changed the default very slightly, but shouldn't be noticeable. #577
-
Async log methods (those starting with an
a) now also support the collection of callsite information usingstructlog.processors.CallsiteParameterAdder. #565
Changed
structlog.stdlib.recreate_defaults()now also addsstructlog.stdlib.add_logger_nameto the processors. Check out the updated screenshot!
Fixed
-
The return value from
get_logger()(aBoundLoggerLazyProxy) now passesisinstance-checks againststructlog.typing.BindableLoggeron Python 3.12. #561 -
structlog.threadlocal.tmp_bind()now also works withBoundLoggerLazyProxy(in other words: before anything is bound to a bound logger). -
stdlib:
ProcessorFormattercan now be told to not render the log record message usinggetMessageand juststr(record.msg)instead. #550 -
stdlib:
structlog.stdlib.BoundLogger.exception()'s handling ofLogRecord.exc_infois now set consistent withlogging. #571 #572