Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: nhairs/python-json-logger
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.0.1
Choose a base ref
...
head repository: nhairs/python-json-logger
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v3.1.0.rc1
Choose a head ref
  • 2 commits
  • 15 files changed
  • 1 contributor

Commits on Apr 1, 2024

  1. Fix CHANGELOG PR reference

    nhairs committed Apr 1, 2024
    Configuration menu
    Copy the full SHA
    2767589 View commit details
    Browse the repository at this point in the history

Commits on May 5, 2024

  1. Split core functionality and support orjson and msgspec (#9)

    ## Summary of changes
    
    ### Refactor common functionality into base module
    This allows support multiple JSON encoders by having common
    functionality in `pythonjsonlogger.core` and then specialist formatters
    for each encoder.
    
    This is useful / needed, as not all JSON encoders support the
    `json.dumps` or `json.JSONEncoder` interfaces exactly. This enables us
    to support other JSON encoders like orjson and msgspec. In the future we
    may add support for other encoders.
    
    ### Better handling for custom styles
    Achieved by mimicking `logging.Formatter.__init__` without actually
    calling it.
    
    A code snippet is worth `2**10` words:
    
    ```python
    from pythonjsonlogger.core import BaseJsonLogger
    
    class CommaSupport(BaseJsonFormatter):
        def parse(self) -> list[str]:
            if isinstance(self._style, str) and self._style == ",":
                return self._fmt.split(",")
            return super().parse()
    
    f = CommaSupport("message,asctime", style=",", validate=False)
    ```
    
    ### Rename `jsonlogger` module to `json` module
    
    Compatibility is maintained for the moment using `__getattr__` in
    `__init__`.
    
    This is to enable more consistent naming of implementation specific
    module names. It also stops throwing around the word "logger" when this
    module only contains formatters.
    
    ### Add support for orjson
    [orjson](https://github.com/ijl/orjson) is a high performance (and more
    JSON spec correct) encoder. Given how many logging calls may occur -
    having a performant formatter available is important.
    
    This includes ensuring it is covered in tests on appropriate platforms.
    
    Note: orjson is not supported on pypy, and currently does not build for
    py313.
    
    ### Add support for msgspec
    [msgspec](https://jcristharif.com/msgspec/index.html) is another library
    containing a high performance JSON encoder.
    
    Note: msgspec is not supported on pypy, and currently does not build for
    py313.
    
    ### Drops python 3.7 support
    This is primary due do making use of the
    [`validate`](https://docs.python.org/3/library/logging.html#formatter-objects)
    argument. I was also having issues with CI because python 3.7 is not support on most "latest"
    nhairs authored May 5, 2024
    1 Configuration menu
    Copy the full SHA
    49f69fb View commit details
    Browse the repository at this point in the history
Loading