chore(deps): update dependency structlog to v25 by renovate[bot] · Pull Request #217 · A-aung/python-docs-samples
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| structlog (changelog) | ==21.1.0 -> ==25.1.0 |
Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
hynek/structlog (structlog)
v25.1.0
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
v24.4.0
Changed
No code changes since 24.3.0
v24.3.0
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
v24.2.0
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
v24.1.0
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
v23.3.0
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
v23.2.0
Removed
- Support for Python 3.7.
Added
-
Official support for Python 3.12.
#515 -
structlog.processors.MaybeTimeStamperthat only adds a timestamp if there isn't one already.
#81 -
structlog.dev.ConsoleRenderernow supports renamed timestamp keys using the timestamp_key parameter.
#541 -
structlog.dev.RichTracebackFormatterthat allows to configure the traceback formatting.
#542
Fixed
FilteringBoundLogger.exception()andFilteringBoundLogger.aexception()now support positional argument formatting like the rest of the methods.
#531structlog.processors.format_exc_info()andstructlog.dev.ConsoleRendererdo not crash anymore when told to format a non-existent exception.
#533
v23.1.0
Added
-
structlog.stdlib.BoundLoggernow has, analogously to our native logger, a full set of async log methods prefixed with ana:await log.ainfo("event!")
#502 -
The default configuration now respects the presence of
FORCE_COLOR(regardless of its value, unless an empty string).
This disables all heuristics whether it makes sense to use colors.
#503 -
The default configuration now respects the presence of
NO_COLOR(regardless of its value, unless an empty string).
This disables all heuristics whether it makes sense to use colors and overridesFORCE_COLOR.
#504
Fixed
-
ConsoleRenderer now reuses the
_figure_out_exc_infoto process theexc_infoargument likeExceptionRendererdoes.
This prevents crashes if the actual Exception is passed for the exc_info argument instead of a tuple orTrue.
#482 -
FilteringBoundLogger.aexception()now extracts the exception info usingsys.exc_info()before passing control to the asyncio executor (where original exception info is no longer available).
#488
v22.3.0
Changed
- String interpolation in
FilteringBoundLogger(used by default) is now only attempted if positional arguments are passed.
This prevents crashes if something different than a string is passed for the event argument.
#475
Fixed
- String interpolation doesn't cause crashes in filtered log call anymore.
#478
v22.2.0
Deprecated
- Accessing package metadata as attributes on the structlog module is deprecated (for example,
structlog.__version__).
Please useimportlib.metadatainstead (for Python 3.7: the importlib-metadata PyPI package). - The
structlog.typesmodule is now deprecated in favor of thestructlog.typingmodule.
It seems like the Python typing community is settling on this name.
Added
-
FilteringBoundLogger(used by default) now allows for string interpolation using positional arguments:>>> log.info("Hello %s! The answer is %d.", "World", 42, x=1) 2022-10-07 10:04.31 [info ] Hello World! The answer is 42. x=1
-
FilteringBoundLoggernow also has support for asyncio-based logging.
Instead of a wrapper class likestructlog.stdlib.AsyncBoundLogger, async equivalents have been added for all logging methods.
So instead oflog.info("hello")you can also writeawait log.ainfo("hello")in async functions and methods.This seems like the better approach and if it's liked by the community,
structlog.stdlib.BoundLoggerwill get those methods too.
#457
Changed
- The documentation has been heavily overhauled.
Have a look if you haven't lately!
Especially the graphs in the standard library chapter have proven valuable to many. - The build backend has been switched to Hatch.
Fixed
- The timestamps in the default configuration now use the correct separator (
:) for seconds.
v22.1.0
Removed
- Python 3.6 is not supported anymore.
- Pickling is now only possible with protocol version 3 and newer.
Deprecated
-
The entire
structlog.threadlocalmodule is deprecated.
Please use the primitives fromstructlog.contextvarsinstead.If you're using the modern APIs (
bind_threadlocal()/merge_threadlocal()) it's enough to replace them 1:1 with theircontextvarscounterparts.
The old approach aroundwrap_dict()has been discouraged for a while.Currently there are no concrete plans to remove the module, but no patches against it will be accepted from now on.
#409
Added
structlog.processors.StackInfoRenderernow has an additional_ignores parameter that allows you to filter out your own logging layer.
#396- Added
structlog.WriteLogger, a faster – but more low-level – alternative tostructlog.PrintLogger.
It works the wayPrintLoggerused to work in previous versions.
#403
#404 structlog.make_filtering_bound_logger()-returned loggers now also have alog()method to match thestructlog.stdlib.BoundLoggersignature closer.
#413- Added structured logging of tracebacks via the
structlog.tracebacksmodule,
and most notably thestructlog.tracebacks.ExceptionDictTransformerwhich can be used with the newstructlog.processors.ExceptionRendererto render JSON tracebacks.
#407 structlog.stdlib.recreate_defaults(log_level=logging.NOTSET)that recreates structlog's defaults on top of standard library'slogging.
It optionally also configuresloggingto log to standard out at the passed log level.
#428structlog.processors.EventRenamerallows you to rename the hitherto hard-coded event dict keyeventto something else.
Optionally, you can rename another key toeventat the same time, too.
So addingEventRenamer(to="msg", replace_by="_event")to your processor pipeline will rename the standardeventkey tomsgand then rename the_eventkey toevent.
This allows you to use theeventkey in your own log files and to have consistent log message keys across languages.structlog.dev.ConsoleRenderer(event_key="event")now allows to customize the name of the key that is used for the log message.
Changed
structlog.make_filtering_bound_logger()now returns a method with the same signature for all log levels, whether they are active or not.
This ensures that invalid calls to inactive log levels are caught immediately and don't explode once the log level changes.
#401structlog.PrintLogger– that is used by default – now usesprint()for printing, making it a better citizen for interactive terminal applications.
#399structlog.testing.capture_logsnow works for already initialized bound loggers.
#408structlog.processors.format_exc_info()is no longer a function, but an instance ofstructlog.processors.ExceptionRenderer.
Its behavior has not changed.
#407- The default configuration now includes the
structlog.contextvars.merge_contextvarsprocessor.
That means you can usestructlog.contextvarsfeatures without configuring structlog.
Fixed
- Overloaded the
bind,unbind,try_unbindandnewmethods in theFilteringBoundLoggerProtocol.
This makes it easier to use objects of typeFilteringBoundLoggerin a typed context.
#392 - Monkeypatched
sys.stdouts are now handled more gracefully byConsoleRenderer(that's used by default).
#404 structlog.stdlib.render_to_log_kwargs()now correctly handles the presence ofexc_info,stack_info, andstackLevelin the event dictionary.
They are transformed into proper keyword arguments instead of putting them into theextradictionary.
#424,
#427
v21.5.0
Added
- Added the
structlog.processors.LogfmtRendererprocessor to render log lines using the logfmt format.
#376 - Added the
structlog.stdlib.ExtraAdderprocessor that adds extra attributes oflogging.LogRecordobjects to the event dictionary.
This processor can be used for adding data passed in theextraparameter of theloggingmodule's log methods to the event dictionary.
#209,
#377 - Added the
structlog.processor.CallsiteParameterAdderprocessor that adds parameters of the callsite that an event dictionary originated from to the event dictionary.
This processor can be used to enrich events dictionaries with information such as the function name, line number and filename that an event dictionary originated from.
#380
v21.4.0
Added
- Added the
structlog.threadlocal.bound_threadlocalandstructlog.contextvars.bound_contextvarsdecorator/context managers to temporarily bind key-value pairs to a thread-local and context-local context.
#371
Fixed
- Fixed import when running in optimized mode (
PYTHONOPTIMIZE=2orpython -OO)
.
#373
v21.3.0
Added
structlog.dev.ConsoleRenderernow hassort_keysboolean parameter that allows to disable the sorting of keys on output.
#358
Changed
- structlog switched its packaging to flit.
Users shouldn't notice a difference, but (re-)packagers might. structlog.stdlib.AsyncBoundLoggernow determines the running loop when logging, not on instantiation.
That has a minor performance impact, but makes it more robust when loops change (for example,aiohttp.web.run_app()), or you want to usesync_blbefore a loop has started.
Fixed
-
structlog.processors.TimeStampernow works well with FreezeGun even when it gets applied before the loggers are configured.
#364 -
structlog.stdlib.ProcessorFormatternow has a processors argument that allows to define a processor chain to run over all log entries.Before running the chain, two additional keys are added to the event dictionary:
_recordand_from_structlog.
With them it's possible to extract information fromlogging.LogRecords and differentiate between structlog andlogginglog entries while processing them.The old processor (singular) parameter is now deprecated, but no plans exist to remove it.
#365
v21.2.0
Added
-
structlog.threadlocal.get_threadlocal()andstructlog.contextvars.get_contextvars()can now be used to get a copy of the current thread-local/context-local context that has been bound usingstructlog.threadlocal.bind_threadlocal()andstructlog.contextvars.bind_contextvars().
#331,
#337 -
structlog.threadlocal.get_merged_threadlocal(bl)andstructlog.contextvars.get_merged_contextvars(bl)do the same, but also merge the context from a bound logger bl.
Same pull requests as previous change. -
structlog.contextvars.bind_contextvars()now returns a mapping of keys tocontextvars.Tokens, allowing you to reset values using the newstructlog.contextvars.reset_contextvars().
#339 -
Exception rendering in
structlog.dev.ConsoleLoggeris now configurable using theexception_formattersetting.
If either the Rich or the better-exceptions package is present, structlog will use them for pretty-printing tracebacks.
Rich takes precedence over better-exceptions if both are present.This only works if
format_exc_infois absent in the processor chain.
#330,
#349 -
The final processor can now return a
bytearray(additionally tostrandbytes).
#344
Changed
-
To implement pretty exceptions (see Changes below),
structlog.dev.ConsoleRenderernow formats exceptions itself.Make sure to remove
format_exc_infofrom your processor chain if you configure structlog manually.
This change is not really breaking, because the old use-case will keep working as before.
However if you passpretty_exceptions=True(which is the default if eitherrichorbetter-exceptionsis installed), a warning will be raised and the exception will be rendered without prettification. -
All use of Colorama on non-Windows systems has been excised.
Thus, colors are now enabled by default instructlog.dev.ConsoleRendereron non-Windows systems.
You can keep using Colorama to customize colors, of course.
#345
Fixed
- structlog is now importable if
sys.stdoutisNone(for example, when running usingpythonw). #313
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Never, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.