[3.1.0](https://github.com/nhairs/python-json-logger/compare/v3.0.1...v3.1.0) - 2023-05-28
This splits common funcitonality out to allow supporting other JSON encoders. Although this is a large refactor, backwards compatibility has been maintained.
Added
- `pythonjsonlogger.core` - more details below.
- `pythonjsonlogger.defaults` module that provides many functions for handling unsupported types.
- Orjson encoder support via `pythonjsonlogger.orjson.OrjsonFormatter` with the following additions:
- bytes are URL safe base64 encoded.
- Exceptions are "pretty printed" using the exception name and message e.g. `"ValueError: bad value passed"`
- Enum values use their value, Enum classes now return all values as a list.
- Tracebacks are supported
- Classes (aka types) are support
- Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__`
- MsgSpec encoder support via `pythonjsonlogger.msgspec.MsgspecFormatter` with the following additions:
- Exceptions are "pretty printed" using the exception name and message e.g. `"ValueError: bad value passed"`
- Enum classes now return all values as a list.
- Tracebacks are supported
- Classes (aka types) are support
- Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__`
- Note: msgspec only supprts enum values of type `int` or `str` [jcrist/msgspec680](https://github.com/jcrist/msgspec/issues/680)
Changed
- `pythonjsonlogger.jsonlogger` has been moved to `pythonjsonlogger.json` with core functionality moved to `pythonjsonlogger.core`.
- `pythonjsonlogger.core.BaseJsonFormatter` properly supports all `logging.Formatter` arguments:
- `fmt` is unchanged.
- `datefmt` is unchanged.
- `style` can now support non-standard arguments by setting `validate` to `False`
- `validate` allows non-standard `style` arguments or prevents calling `validate` on standard `style` arguments.
- `default` is ignored.
- `pythonjsonlogger.json.JsonFormatter` default encodings changed:
- bytes are URL safe base64 encoded.
- Exception formatting detected using `BaseException` instead of `Exception`. Now "pretty prints" the exception using the exception name and message e.g. `"ValueError: bad value passed"`
- Dataclasses are now supported
- Enum values now use their value, Enum classes now return all values as a list.
- Will fallback on `__str__` if available, else `__repr__` if available, else will use `__could_not_encode__`
- Renaming fields now preserves order ([7](https://github.com/nhairs/python-json-logger/issues/7)) and ignores missing fields ([#6](https://github.com/nhairs/python-json-logger/issues/6)).
- Documentation
- Generated documentation using `mkdocs` is stored in `docs/`
- Documentation within `README.md` has been moved to `docs/index.md` and `docs/qucikstart.md`.
- `CHANGELOG.md` has been moved to `docs/change-log.md`
- `SECURITY.md` has been moved and replaced with a symbolic link to `docs/security.md`.
Deprecated
- `pythonjsonlogger.jsonlogger` is now `pythonjsonlogger.json`
- `pythonjsonlogger.jsonlogger.RESERVED_ATTRS` is now `pythonjsonlogger.core.RESERVED_ATTRS`.
- `pythonjsonlogger.jsonlogger.merge_record_extra` is now `pythonjsonlogger.core.merge_record_extra`.
Removed
- Python 3.7 support dropped
- `pythonjsonlogger.jsonlogger.JsonFormatter._str_to_fn` replaced with `pythonjsonlogger.core.str_to_object`.