4.3.0 - UNRELEASED
Added
- CI: Use trusted publishing to create PyPI and GitHub releases.
- Documentation: Quickstart examples are tested to ensure the sample output matches reality.
- Add support for Python 3.15, PyPy 3.12
Removed
STYLE_STRING_FORMAT_REGEX, which is no longer used to find{style fields. #75
Changed
- Preserve an exception's own notes when encoding exception instances, including exception group summaries. Related to #67.
- Constrain the documentation dependency to
mkdocs<2. #80 - Replaced MyPy with Pyrefly for type checking
Fixed
exc_info_as_array=Truenow splits cached exception text into lines when a transported log record has noexc_infotuple. #89BaseJsonFormatter.usesTime()now handles comma-separated and sequence formats, honors custom field parsing, and ignores escaped literalasctimefields. #91%style formats no longer treat the escaped literal%%as the start of a field, so"%%(notafield)s"is correctly read as literal text. #75{style formats now usestring.Formatter(aslogging.StrFormatStyle.validatedoes) to find fields, so escaped literal braces ({{/}}) are skipped and a conversion ({message!r}) or format spec ({levelname:>8}) is no longer treated as part of the field name. #75defaultsis copied on construction likerename_fieldsandstatic_fields, so DictConfiguratorext://prefixes are converted and mutating the caller's dict cannot change formatter state.- A string passed as
reserved_attrsraisesTypeErrorinstead of being iterated as characters; use a list or tuple of field names.
Thanks @dylanpulver, @Gonghan-Princess, @JackyHsu-X, @00200200, @SAY-5, @AryanRG