- Update to 25.5.0:
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:
OBS-URL: https://build.opensuse.org/request/show/1314508
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-structlog?expand=0&rev=18
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:
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-structlog?expand=0&rev=34
- Update to 25.4.0:
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 affects structlog.stdlib.filter_by_level(). #723
* structlog.tracebacks now handles exception groups. structlog.tracebacks.Stack has two
new fields, is_group: bool and exceptions: list[Trace]. This works similarly to what
Rich v14.0.0 does. #720
Fixed:
* structlog.processors.ExceptionPrettyPrinter now respects the exception_formatter
arguments instead of always using the default formatter. #724
OBS-URL: https://build.opensuse.org/request/show/1282044
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-structlog?expand=0&rev=17
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 affects structlog.stdlib.filter_by_level(). #723
* structlog.tracebacks now handles exception groups. structlog.tracebacks.Stack has two
new fields, is_group: bool and exceptions: list[Trace]. This works similarly to what
Rich v14.0.0 does. #720
Fixed:
* structlog.processors.ExceptionPrettyPrinter now respects the exception_formatter
arguments instead of always using the default formatter. #724
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-structlog?expand=0&rev=32
- Update to 25.2.0:
Added:
* structlog.tracebacks.Stack now includes an exc_notes field reflecting
the notes attached to the exception. #684
Changed:
* structlog.stdlib.BoundLogger's binding-related methods now also return Self. #694
* structlog.processors.TimeStamper now produces internally timezone-aware
datetime objects. Default output hasn't changed, but you can now use %z in your fmt string. #709
Fixed:
* Expose structlog.dev.RichTracebackFormatter for imports. #699
* Expose structlog.processors.LogfmtRenderer for imports. #701
OBS-URL: https://build.opensuse.org/request/show/1252316
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-structlog?expand=0&rev=15
Added:
* structlog.tracebacks.Stack now includes an exc_notes field reflecting
the notes attached to the exception. #684
Changed:
* structlog.stdlib.BoundLogger's binding-related methods now also return Self. #694
* structlog.processors.TimeStamper now produces internally timezone-aware
datetime objects. Default output hasn't changed, but you can now use %z in your fmt string. #709
Fixed:
* Expose structlog.dev.RichTracebackFormatter for imports. #699
* Expose structlog.processors.LogfmtRenderer for imports. #701
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-structlog?expand=0&rev=28
- Update to 25.1.0:
Added:
* Add structlog.stdlib.render_to_log_args_and_kwargs processor. Same
as structlog.stdlib.render_to_log_kwargs, but also allows to pass
positional arguments to logging. With it, you do not need to add
structlog.stdlib.PositionalArgumentsFormatter processor to format
positional arguments from structlog loggers. #668
* Native loggers now have is_enabled_for() and get_effective_level()
methods that mirror the behavior of the standard library's
logging.Logger.isEnabledFor() and logging.Logger.getEffectiveLevel(). #689
Changed:
* structlog.typing.BindableLogger protocol now returns Self instead
of BindableLogger. This adds a dependency on typing-extensions for
Pythons older than 3.11. #642#659
* structlog.dev.ConsoleRenderer will quote string value with special characters. #647
* structlog.stdlib.recreate_defaults() now also adds structlog.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 key
exception: "MISSING" or lead to an error. Now, an invalid or missing exc_info will
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.ConsoleRenderer does 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 to error() or critical(). #677
* structlog.tracebacks.ExceptionDictTransformer now actually accepts None for locals_max_length
and locals_max_string. #675
OBS-URL: https://build.opensuse.org/request/show/1243280
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-structlog?expand=0&rev=14
Added:
* Add structlog.stdlib.render_to_log_args_and_kwargs processor. Same
as structlog.stdlib.render_to_log_kwargs, but also allows to pass
positional arguments to logging. With it, you do not need to add
structlog.stdlib.PositionalArgumentsFormatter processor to format
positional arguments from structlog loggers. #668
* Native loggers now have is_enabled_for() and get_effective_level()
methods that mirror the behavior of the standard library's
logging.Logger.isEnabledFor() and logging.Logger.getEffectiveLevel(). #689
Changed:
* structlog.typing.BindableLogger protocol now returns Self instead
of BindableLogger. This adds a dependency on typing-extensions for
Pythons older than 3.11. #642#659
* structlog.dev.ConsoleRenderer will quote string value with special characters. #647
* structlog.stdlib.recreate_defaults() now also adds structlog.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 key
exception: "MISSING" or lead to an error. Now, an invalid or missing exc_info will
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.ConsoleRenderer does 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 to error() or critical(). #677
* structlog.tracebacks.ExceptionDictTransformer now actually accepts None for locals_max_length
and locals_max_string. #675
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-structlog?expand=0&rev=26
- Update to 24.4.0:
* This is just a docs / PyPI README update. No code changes whatsoever.
- Update to 24.3.0:
* Restore feature parity between structlog.traceback.ExceptionDictTransformer
and Rich's traceback extractor #627
+ When displaying locals, use Rich for formatting if it is available.
+ When displaying locals, call repr() on strings, too (improves handling of
SecretStr implementations).
+ Add locals_max_length config option
+ Add locals_hide_sunder config option
+ Add locals_hide_dunder config option
+ Add suppress config option
* structlog.testing.capture_logs() now maps the exception log level to
error (as it's elsewhere) #628
OBS-URL: https://build.opensuse.org/request/show/1188962
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-structlog?expand=0&rev=24
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.