logging-log4j2 icon indicating copy to clipboard operation
logging-log4j2 copied to clipboard

Mixing `ContextDataProvider` and `ThreadContext`

Open slinkydeveloper opened this issue 2 years ago • 2 comments

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

slinkydeveloper avatar Dec 15 '23 14:12 slinkydeveloper

Shadowing always comes with caveats. If we fix/warn/document this for, say, ThreadContextDataProvider, we should ideally repeat the same for dozens of other Log4j ServiceProviders too. What I would appreciate is a section to the extending page warning users against caveats of shadowing and guiding them how to safely collapse ServiceProviders and Log4j2Plugins.dat files using log4j-transformer. We should ideally share concrete examples for the market leaders (Gradle's shadowJar, flatten-maven-plugin, etc.) too. @slinkydeveloper, is this something you can contribute in a PR?

vy avatar Dec 18 '23 09:12 vy

I would even make a separate page in the Developer's Guide for shading.

Shading has a lot of aspects, including a legal one. I would include a section that references some answers from LEGAL, e.g.:

[Although I am not entirely satisfied by those answers, since they are prepended by IANAL]

ppkarwasz avatar Dec 18 '23 09:12 ppkarwasz