Hi Ralph, On Thu, 18 Jan 2024 at 16:15, Ralph Goers <ralph.go...@dslextreme.com> wrote: > Note that LogManager has > > import org.apache.logging.log4j.simple.SimpleLoggerContextFactory; > import org.apache.logging.log4j.spi.LoggerContext; > import org.apache.logging.log4j.spi.LoggerContextFactory; > import org.apache.logging.log4j.spi.LoggingSystem; > import org.apache.logging.log4j.spi.Terminable; > import org.apache.logging.log4j.status.StatusLogger; > import org.apache.logging.log4j.util.StackLocatorUtil; > import org.apache.logging.log4j.util.Strings; > > That would require users to have the SPI would it not?
On Thu, 18 Jan 2024 at 16:20, Ralph Goers <ralph.go...@dslextreme.com> wrote: > And ThreadContext contains > > import org.apache.logging.log4j.message.ParameterizedMessage; > import org.apache.logging.log4j.spi.LoggingSystem; > import org.apache.logging.log4j.spi.LoggingSystemProperty; > import org.apache.logging.log4j.spi.ReadOnlyThreadContextMap; > import org.apache.logging.log4j.spi.ThreadContextMap; > import org.apache.logging.log4j.spi.ThreadContextStack; > import org.apache.logging.log4j.util.InternalApi; > import org.apache.logging.log4j.util.Strings IMHO, the public API contains: 1. all the types in the `o.a.l.l` package, 2. all the superclasses and superinterfaces of a type in the public API (recursively), 3. all the types that appear in the signature of public methods of a type in the public API (recursively). Which mean the the Log4j API contains `o.a.l.l` and the following types from other packages: org.apache.logging.log4j.message.EntryMessage org.apache.logging.log4j.message.ExitMessage org.apache.logging.log4j.message.FlowMessage org.apache.logging.log4j.message.FlowMessageFactory org.apache.logging.log4j.message.Message org.apache.logging.log4j.message.MessageFactory org.apache.logging.log4j.spi.LoggerContext org.apache.logging.log4j.spi.ExtendedLogger org.apache.logging.log4j.spi.LoggerContextFactory org.apache.logging.log4j.spi.LoggerRegistry org.apache.logging.log4j.spi.StandardLevel org.apache.logging.log4j.spi.ReadOnlyThreadContextMap org.apache.logging.log4j.util.BiConsumer org.apache.logging.log4j.util.ReadOnlyStringMap org.apache.logging.log4j.util.StringMap org.apache.logging.log4j.util.StringBuilderFormattable org.apache.logging.log4j.util.Supplier org.apache.logging.log4j.util.TriConsumer Removing a method from any one of these can break user's code. Some of these (certainly `Supplier`, but to a smaller extent `Message`, `BiConsumer` and `TriConsumer`) are implemented by users, so even adding an abstract method to those, will break user code. Piotr