Skip to content

Mixing ContextDataProvider and ThreadContext #2099

Open
@slinkydeveloper

Description

@slinkydeveloper

Description

Hi all, I just stumbled on an interesting behavior mixing ContextDataProvider and ThreadContext.

In short, my application is using a dependency that provides a custom ContextDataProvider through SPI, but in my application code I also use ThreadContext.

When bundling using the gradle shadowJar plugin, I didn't configured the plugin to merge the SPI files, thus only the custom ContextDataProvider was loaded in the uber JAR, and not the built-in ThreadContextDataProvider.

Although it makes sense from the ServiceLoader POV, I wonder if something can be done to make this behavior less subtle, some ideas:

  • log4j2 could still mount the ThreadContextDataProvider, even though is not registered through SPI
  • log4j2 could print a warning when using ThreadContext but no ThreadContextDataProvider was loaded
  • Perhaps adding some documentation here helps as well https://logging.apache.org/log4j/2.x/manual/extending.html#custom-contextdataprovider , although for the final users that are mixing libraries, this might not be obvious anyway

Configuration

Version: 2.22.0

Operating system: Linux

JDK: 21

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    To triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions