structlog v20.2.0 Release Notes
Release Date: 2020-12-31 // over 3 years ago-
Backward-incompatible changes:
👍 Python 2.7 and 3.5 aren't supported anymore. The package meta data should ensure that you keep getting 20.1.0 on those versions.
#244 <https://github.com/hynek/structlog/pull/244>
_structlog
is now fully type-annotated. This won't break your applications, but if you use Mypy, it will most likely break your CI.
Check out the new chapter on typing for details.
- 🔧 The default bound logger (
wrapper_class
) if you don't configurestructlog
has changed. It's mostly compatible with the old one but a few uncommon methods likelog
,failure
, orerr
don't exist anymore.
You can regain the old behavior by using
structlog.configure(wrapper_class=structlog.BoundLogger)
.Please note that due to the various interactions between settings, it's possible that you encounter even more errors. We strongly urge you to always configure all possible settings since the default configuration is not covered by our
backward compatibility policy <https://www.structlog.org/en/stable/backward-compatibility.html>
_.🗄 Deprecations: ^
- 🗄 Accessing the
_context
attribute of a bound logger is now deprecated. Please use the newstructlog.get_context()
.
🔄 Changes: ^
structlog
has now type hints for all of its APIs! Sincestructlog
is highly dynamic and configurable, this led to a few concessions like a specializedstructlog.stdlib.get_logger()
whose only difference tostructlog.get_logger()
is that it has the correct type hints.
We consider them provisional for the time being – i.e. the backward compatibility does not apply to them in its full strength until we feel we got it right. Please feel free to provide feedback!
#223 <https://github.com/hynek/structlog/issues/223>
,#282 <https://github.com/hynek/structlog/issues/282>
- Added
structlog.make_filtering_logger
that can be used likeconfigure(wrapper_class=make_filtering_bound_logger(logging.INFO))
. It creates a highly optimized bound logger whose inactive methods only consist of areturn None
. This is now also the default logger. - 🌲 As a complement,
structlog.stdlib.add_log_level()
can now additionally be imported asstructlog.processors.add_log_level
since it just adds the method name to the event dict. - 🌲
structlog.processors.add_log_level()
is now part of the default configuration. structlog.stdlib.ProcessorFormatter
no longer uses exceptions for control flow, allowingforeign_pre_chain
processors to usesys.exc_info()
to access the real exception.- ➕ Added
structlog.BytesLogger
to avoid unnecessary encoding round trips. Concretely this is useful with orjson which returns bytes.#271 <https://github.com/hynek/structlog/issues/271>
_ - The final processor now also may return bytes that are passed untouched to the wrapped logger.
structlog.get_context()
allows you to retrieve the original context of a bound logger.#266 <https://github.com/hynek/structlog/issues/266>
_,- 🖨
structlog.PrintLogger
now supportscopy.deepcopy()
.#268 <https://github.com/hynek/structlog/issues/268>
_ - ➕ Added
structlog.testing.CapturingLogger
for more unit testing goodness. - ➕ Added
structlog.stdlib.AsyncBoundLogger
that executes logging calls in a thread executor and therefore doesn't block.#245 <https://github.com/hynek/structlog/pull/245>
_