Ok, that’s the one I reverted. I’ll split it up into more digestible pieces.
> On Nov 1, 2022, at 6:40 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > > Thanks Matt. I was referring to the one in the first email of this thread. > > Ralph > >> On Nov 1, 2022, at 1:41 PM, Matt Sicker <m...@musigma.org> wrote: >> >> I’ve reverted the last two commits as they were basically the last commit, >> though I’m not exactly sure if you’re referring to that one in particular. >> I’ll break it down into smaller pieces, though, and submit the non-trivial >> parts as a PR. >> — >> Matt Sicker >> >>> On Nov 1, 2022, at 10:21, Ralph Goers <ralph.go...@dslextreme.com> wrote: >>> >>> I have more questions on this. >>> >>> 1. PropertiesUtil cannot be deprecated. It is used by Spring Boot to >>> register its PropertiesSource. >>> 2. All these classes that you have marked internal are opened to various >>> Log4j modules. That means they are NOT open to any other implementation of >>> the Log4j-API. Can we really do that? >>> >>> The more I am looking at this I would prefer that you revert this commit >>> and put it on a branch as several PRs that split it up into things we can >>> really review. >>> >>> So I am -1 on this commit. >>> >>> Ralph >>> >>>> On Oct 31, 2022, at 7:40 PM, Apache <ralph.go...@dslextreme.com> wrote: >>>> >>>> Are you using your old email address? I keep having to moderate them >>>> through. >>>> >>>> Yes they should be in an appropriately named package under the internal >>>> package. >>>> >>>> Ralph >>>> >>>>> On Oct 31, 2022, at 7:36 PM, Matt Sicker <mattsic...@sickmatter.com> >>>>> wrote: >>>>> >>>>> We could consolidate the Log4j-private classes into the internal package >>>>> and export it to other Log4j modules. That makes sense. >>>>> >>>>> And LoggingSystem probably doesn’t need a Lazy instance of itself, right. >>>>> >>>>> — >>>>> Matt Sicker >>>>> >>>>>> On Oct 31, 2022, at 20:58, Apache <ralph.go...@dslextreme.com> wrote: >>>>>> >>>>>> >>>>>> >>>>>> See below >>>>>> >>>>>>>> On Oct 31, 2022, at 6:49 PM, Matt Sicker <mattsic...@sickmatter.com> >>>>>>>> wrote: >>>>>>> >>>>>>> The util3 package is a collection of all the private classes we have. >>>>>>> We discussed the general idea on a recent conference call. These are >>>>>>> pseudo private classes. They’re meant for internal use only and are >>>>>>> guarded by the module info. JUnit does the same thing >>>>>> >>>>>> If they are private then they should be under a package named internal. >>>>>> It won’t be obvious to devs not using JPMS that they are private. >>>>>> >>>>>>> The point of Lazy is ensuring thread safe publication of initialized >>>>>>> variables that may be initialized by multiple threads. There are two >>>>>>> main variants: one that guarantees the supplier function is executed >>>>>>> only once and one that may run the supplier more than once but has a >>>>>>> single return value. >>>>>> >>>>>> But why is it necessary? When getInstance is called that operation >>>>>> should only be performed once. GetInstance is already lazy so why do we >>>>>> need lazy initialization of the stuff in it? >>>>>> >>>>>> Ralph >>>>>> >>>>>>> >>>>>>> — >>>>>>> Matt Sicker >>>>>>> >>>>>>>>> On Oct 31, 2022, at 17:53, Ralph Goers <ralph.go...@dslextreme.com> >>>>>>>>> wrote: >>>>>>>> >>>>>>>> Also, in LoggingSystem.java >>>>>>>> >>>>>>>> private static final String[] COMPATIBLE_API_VERSIONS = {"2.6.0"}; >>>>>>>> >>>>>>>> absolutely needs to be changed to version “3.0.0”. >>>>>>>> >>>>>>>> Ralph >>>>>>>> >>>>>>>>>> On Oct 31, 2022, at 3:49 PM, Ralph Goers >>>>>>>>>> <ralph.go...@dslextreme.com> wrote: >>>>>>>>> >>>>>>>>> Matt, >>>>>>>>> >>>>>>>>> I absolutely would have preferred that you had created a PR for this >>>>>>>>> and asked for a review before committing it as I have a few concerns: >>>>>>>>> >>>>>>>>> 1. It is a massive commit. It is going to take time to digest exactly >>>>>>>>> what you have done. >>>>>>>>> 2. You have created a util3 package in API with no discussion of this >>>>>>>>> on the dev list. I assume that it contains artifacts that were >>>>>>>>> cleaned up from util and are now no longer compatible? Or does it >>>>>>>>> only contain classes that are exportable to other Log4j artifacts (I >>>>>>>>> do see that in module-info.java). If these classes are meant to be >>>>>>>>> private then I would have preferred that it be moved to >>>>>>>>> internal/util. >>>>>>>>> 3. I no longer understand the point of Lazy<>. LogManager now >>>>>>>>> performs no static initialization that I can see. Instead, it calls >>>>>>>>> LoggingSystem.getInstance(). What is the point of making >>>>>>>>> initialization of INSTANCE lazy? You accomplished what you wanted to >>>>>>>>> by moving the static initialization to another class. >>>>>>>>> 4-10. I have no idea as it will take me a week to muddle through the >>>>>>>>> rest of all these changes to figure out what happened. >>>>>>>>> >>>>>>>>> Ralph >>>>>>>>> >>>>>>>>>>> On Oct 30, 2022, at 6:24 PM, mattsic...@apache.org wrote: >>>>>>>>>> >>>>>>>>>> This is an automated email from the ASF dual-hosted git repository. >>>>>>>>>> >>>>>>>>>> mattsicker pushed a commit to branch master >>>>>>>>>> in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> The following commit(s) were added to refs/heads/master by this push: >>>>>>>>>> new aab23d5c05 [LOG4J2-3459] - Add LoggingSystemProvider SPI >>>>>>>>>> aab23d5c05 is described below >>>>>>>>>> >>>>>>>>>> commit aab23d5c05bff2915c290dff3e73a0ae03caf43a >>>>>>>>>> Author: Matt Sicker <mattsic...@apache.org> >>>>>>>>>> AuthorDate: Sun Oct 30 20:24:17 2022 -0500 >>>>>>>>>> >>>>>>>>>> [LOG4J2-3459] - Add LoggingSystemProvider SPI >>>>>>>>>> >>>>>>>>>> This helps clean up a lot of static state in Log4j API along with >>>>>>>>>> enabling further extensibility by exposing >>>>>>>>>> LoggingSystemProvider::getInstance which can be implemented using >>>>>>>>>> Injector in Log4j Core. The general utility class for working with >>>>>>>>>> this provider is available as an internal (util3) class in >>>>>>>>>> LoggingSystem. Test fixture helper classes have also been updated to >>>>>>>>>> use LoggingSystem directly. >>>>>>>>>> >>>>>>>>>> Signed-off-by: Matt Sicker <mattsic...@apache.org> >>>>>>>>>> --- >>>>>>>>>> .../junit/LogManagerLoggerContextFactoryRule.java | 11 +- >>>>>>>>>> .../test/junit/LoggerContextFactoryExtension.java | 12 +- >>>>>>>>>> .../{TestProvider.java => TestSystemProvider.java} | 23 +- >>>>>>>>>> .../log4j/spi/DefaultThreadContextMapTest.java | 10 +- >>>>>>>>>> ....apache.logging.log4j.spi.LoggingSystemProvider | 17 ++ >>>>>>>>>> .../services/org.apache.logging.log4j.spi.Provider | 1 - >>>>>>>>>> log4j-api/src/main/java/module-info.java | 5 +- >>>>>>>>>> .../java/org/apache/logging/log4j/LogManager.java | 76 +------ >>>>>>>>>> .../org/apache/logging/log4j/ThreadContext.java | 133 +++++------ >>>>>>>>>> .../org/apache/logging/log4j/internal/Binding.java | 32 ++- >>>>>>>>>> .../apache/logging/log4j/internal/BindingMap.java | 59 +++++ >>>>>>>>>> .../log4j/simple/SimpleLoggingSystemProvider.java | 24 +- >>>>>>>>>> .../log4j/spi/AbstractLoggingSystemProvider.java | 60 +++++ >>>>>>>>>> .../CopyOnWriteSortedArrayThreadContextMap.java | 68 ++---- >>>>>>>>>> .../log4j/spi/DefaultContextMapFactory.java | 102 +++++++++ >>>>>>>>>> .../log4j/spi/DefaultContextStackFactory.java | 50 ++++ >>>>>>>>>> .../logging/log4j/spi/DefaultThreadContextMap.java | 36 +-- >>>>>>>>>> .../GarbageFreeSortedArrayThreadContextMap.java | 51 ++--- >>>>>>>>>> .../log4j/spi/LegacyLoggingSystemProvider.java | 125 ++++++++++ >>>>>>>>>> .../logging/log4j/spi/LoggingSystemProvider.java | 82 +++++++ >>>>>>>>>> .../org/apache/logging/log4j/spi/Provider.java | 253 >>>>>>>>>> --------------------- >>>>>>>>>> .../logging/log4j/spi/ThreadContextMapFactory.java | 134 ----------- >>>>>>>>>> .../org/apache/logging/log4j/util/LazyInt.java | 52 ----- >>>>>>>>>> .../org/apache/logging/log4j/util3/Activator.java | 57 +++-- >>>>>>>>>> .../org/apache/logging/log4j/util3/Constants.java | 43 ++-- >>>>>>>>>> .../apache/logging/log4j/util3/LoggingSystem.java | 223 >>>>>>>>>> ++++++++++++++++++ >>>>>>>>>> .../apache/logging/log4j/util3/PropertiesUtil.java | 31 +-- >>>>>>>>>> .../apache/logging/log4j/util3/ProviderUtil.java | 143 ------------ >>>>>>>>>> .../core/test/junit/ContextSelectorCallback.java | 9 +- >>>>>>>>>> .../core/test/junit/LoggerContextResolver.java | 10 +- >>>>>>>>>> .../log4j/core/test/junit/LoggerContextRule.java | 5 +- >>>>>>>>>> ....apache.logging.log4j.spi.LoggingSystemProvider | 17 ++ >>>>>>>>>> .../services/org.apache.logging.log4j.spi.Provider | 1 - >>>>>>>>>> log4j-core/src/main/java/module-info.java | 7 +- >>>>>>>>>> .../log4j/core/impl/Log4jSystemProvider.java | 75 ++++++ >>>>>>>>>> .../apache/logging/log4j/core/osgi/Activator.java | 4 +- >>>>>>>>>> ....apache.logging.log4j.spi.LoggingSystemProvider | 17 ++ >>>>>>>>>> .../services/org.apache.logging.log4j.spi.Provider | 1 - >>>>>>>>>> .../CopyOnWriteOpenHashMapThreadContextMap.java | 3 +- >>>>>>>>>> .../GarbageFreeOpenHashMapThreadContextMap.java | 3 +- >>>>>>>>>> log4j-to-jul/src/main/java/module-info.java | 7 +- >>>>>>>>>> .../{JULProvider.java => JULSystemProvider.java} | 24 +- >>>>>>>>>> ....apache.logging.log4j.spi.LoggingSystemProvider | 17 ++ >>>>>>>>>> .../services/org.apache.logging.log4j.spi.Provider | 18 -- >>>>>>>>>> .../org/apache/logging/slf4j/MDCContextMap.java | 19 +- >>>>>>>>>> .../apache/logging/slf4j/SLF4JSystemProvider.java | 30 ++- >>>>>>>>>> ....apache.logging.log4j.spi.LoggingSystemProvider | 17 ++ >>>>>>>>>> .../services/org.apache.logging.log4j.spi.Provider | 1 - >>>>>>>>>> src/changes/changes.xml | 3 + >>>>>>>>>> src/site/asciidoc/manual/extending.adoc | 20 +- >>>>>>>>>> src/site/asciidoc/runtime-dependencies.adoc | 4 +- >>>>>>>>>> 51 files changed, 1202 insertions(+), 1023 deletions(-) >>>>>>>>> >>>>>>>> >>>>>> >>>> >>> >> >