On Wed, Dec 30, 2020 at 6:50 PM Ralph Goers <ralph.go...@dslextreme.com> wrote:
> I should add that I am fine with getting rid of "2" interfaces that are > only used by users who are implementing their own customizations. We can > document that. I'm also ok with getting rid of Supplier if we can show that > no code change or compilation is required. I don't know if that is true > with Lambdas. > Hi All, > "no code change or compilation is required." That sounds like a fantasy ;-) since we've already broken source and binary compatibility in log4j-api with 2.x by removing deprecated methods, so we're already in jar hell territory. So removing our custom Supplier and folder "2" types should also be ok. mvn revapi:check -pl log4j-api -Drevapi.skip=false says: [ERROR] java.method.removed: method void org.apache.logging.log4j.Logger::entry(): Method was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.Logger::entry(java.lang.Object[]): Method was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.Logger::exit(): Method was removed. [ERROR] java.method.removed: method <R> R org.apache.logging.log4j.Logger::exit(R): Method was removed. [ERROR] java.method.removed: method org.apache.logging.log4j.Marker org.apache.logging.log4j.MarkerManager::getMarker(java.lang.String, java.lang.String): Method was removed. [ERROR] java.method.removed: method org.apache.logging.log4j.Marker org.apache.logging.log4j.MarkerManager::getMarker(java.lang.String, org.apache.logging.log4j.Marker): Method was removed. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.FormattedMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.LocalizedMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.MessageFormatMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.method.removed: method void org.apache.logging.log4j.message.ParameterizedMessage::<init>(java.lang.String, java.lang.String[], java.lang.Throwable): Method was removed. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.ParameterizedMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.ParameterizedNoReferenceMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.SimpleMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerInheritsFromClass: class org.apache.logging.log4j.message.StringFormatterMessageFactory: Class no longer inherits from 'org.apache.logging.log4j.message.AbstractMessageFactory'. [ERROR] java.class.noLongerImplementsInterface: class org.apache.logging.log4j.simple.SimpleLogger: Class no longer implements interface 'org.apache.logging.log4j.spi.LocationAwareLogger'. [ERROR] java.field.serialVersionUIDUnchanged: field org.apache.logging.log4j.spi.AbstractLogger.serialVersionUID: The class changed in an incompatible way with regards to serialization but the serialVersionUID field stayed unchanged. This might be ok and/or desired but is suspicious. [ERROR] java.method.removed: method org.apache.logging.log4j.message.EntryMessage org.apache.logging.log4j.spi.AbstractLogger::enter(java.lang.String, org.apache.logging.log4j.util.MessageSupplier): Method was removed. [ERROR] java.method.removed: method org.apache.logging.log4j.message.EntryMessage org.apache.logging.log4j.spi.AbstractLogger::enter(java.lang.String, java.lang.String, org.apache.logging.log4j.util.MessageSupplier[]): Method was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.spi.AbstractLogger::entry(): Method was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.spi.AbstractLogger::entry(java.lang.Object[]): Method was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.spi.AbstractLogger::exit(): Method was removed. [ERROR] java.method.removed: method <R> R org.apache.logging.log4j.spi.AbstractLogger::exit(R): Method was removed. [ERROR] java.class.noLongerImplementsInterface: class org.apache.logging.log4j.spi.AbstractLogger: Class no longer implements interface 'org.apache.logging.log4j.spi.LocationAwareLogger'. [ERROR] java.class.noLongerImplementsInterface: class org.apache.logging.log4j.spi.ExtendedLoggerWrapper: Class no longer implements interface 'org.apache.logging.log4j.spi.LocationAwareLogger'. [ERROR] java.class.removed: interface org.apache.logging.log4j.spi.LocationAwareLogger: Class was removed. [ERROR] java.class.removed: class org.apache.logging.log4j.spi.LoggerContextKey: Class was removed. [ERROR] java.class.removed: class org.apache.logging.log4j.spi.MessageFactory2Adapter: Class was removed. [ERROR] java.class.noLongerImplementsInterface: class org.apache.logging.log4j.status.StatusLogger: Class no longer implements interface 'org.apache.logging.log4j.spi.LocationAwareLogger'. [ERROR] java.class.removed: class org.apache.logging.log4j.util.Base64Util: Class was removed. [ERROR] java.class.removed: class org.apache.logging.log4j.util.ProcessIdUtil: Class was removed. [ERROR] java.method.removed: method void org.apache.logging.log4j.util.ProviderUtil::loadProviders(java.util.Enumeration<java.net.URL>, java.lang.ClassLoader): Method was removed. [ERROR] java.annotation.added: interface org.osgi.framework.Bundle: Element newly annotated with 'org.osgi.annotation.versioning.ProviderType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.method.addedToInterface: method <S> org.osgi.framework.ServiceObjects<S> org.osgi.framework.BundleContext::getServiceObjects(org.osgi.framework.ServiceReference<S>): Method was added to an interface. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.method.addedToInterface: method <S> org.osgi.framework.ServiceRegistration<S> org.osgi.framework.BundleContext::registerService(java.lang.Class<S>, org.osgi.framework.ServiceFactory<S>, java.util.Dictionary<java.lang.String, ?>): Method was added to an interface. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.BundleContext: Element newly annotated with 'org.osgi.annotation.versioning.ProviderType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.BundleListener: Element newly annotated with 'org.osgi.annotation.versioning.ConsumerType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.Filter: Element newly annotated with 'org.osgi.annotation.versioning.ProviderType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.FrameworkListener: Element newly annotated with 'org.osgi.annotation.versioning.ConsumerType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.class.externalClassExposedInAPI: interface org.osgi.framework.ServiceFactory<S>: A class from supplementary archives is used in a public capacity in the API. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.ServiceListener: Element newly annotated with 'org.osgi.annotation.versioning.ConsumerType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.class.externalClassExposedInAPI: interface org.osgi.framework.ServiceObjects<S>: A class from supplementary archives is used in a public capacity in the API. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.ServiceReference<S>: Element newly annotated with 'org.osgi.annotation.versioning.ProviderType'. [org.osgi:org.osgi.core:jar:6.0.0] [ERROR] java.annotation.added: interface org.osgi.framework.ServiceRegistration<S>: Element newly annotated with 'org.osgi.annotation.versioning.ProviderType'. [org.osgi:org.osgi.core:jar:6.0.0] Gary > > Ralph > > ----- Original Message ----- > From: "ralph.goers @dslextreme.com" <ralph.go...@dslextreme.com> > To: dev@logging.apache.org > Sent: Wednesday, December 30, 2020 4:42:19 PM > Subject: Re: Deleting log4j-layout-jackson* modules from master > > Changing package names would require every user of the Log4j API to have > to change their code. We are not going to do that to our users. That is one > of the reasons folks have stuck with Log4j 1.x for so long. I would be -1 > on any changes that require that. > > Ralph > > > On Dec 30, 2020, at 2:47 PM, Gary Gregory <garydgreg...@gmail.com> > wrote: > > > > Well. we should clean up our APIs now that we are on Java 8 and probably > > 11. For example, delete org.apache.logging.log4j.util.Supplier and use > > java.util.function.Supplier. Fold all interfaces and classes postfixed > with > > "2" into their superclass. All of this will break BC which is what a > major > > version change allows us to do. All of this means a new package name and > > Maven coordinates to avoid jar hell. > > > > Gary > > > > On Wed, Dec 30, 2020 at 4:01 PM Ralph Goers <ralph.go...@dslextreme.com> > > wrote: > > > >> We would only need to do that if the versions are incompatible. Maven > >> won’t let you have two versions of log4j-api or log4j-core. > >> > >> Ralph > >> > >>> On Dec 30, 2020, at 1:02 PM, Gary Gregory <garydgreg...@gmail.com> > >> wrote: > >>> > >>> Another thing for 3.0 is when to change the package name so you can > have > >>> 2.x and 3.x in the same class loader without things blowing left and > >> right. > >>> Just like you can have 1.x and 2.x at the same time. > >>> > >>> Gary > >>> > >>> On Wed, Dec 30, 2020, 14:47 Ralph Goers <ralph.go...@dslextreme.com> > >> wrote: > >>> > >>>> If we are going to deprecate them we need to announce that in the next > >>>> release. I know JSONLayout is being used because we have people > >> complain > >>>> about it. If we do that we should have at least 6 months before 3.0 is > >>>> released and 2.x and 3.0 are going to both be active for a while. > >>>> > >>>> > >>>> Ralph > >>>> > >>>>> On Dec 30, 2020, at 12:30 PM, Volkan Yazıcı <volkan.yaz...@gmail.com > > > >>>> wrote: > >>>>> > >>>>> My motivation for dropping these modules are not merely due to the > new > >>>>> JsonTemplateLayout, though rather reducing the maintenance burden. I > >>>>> "hypothesise" they are not used. For one, I cannot imagine a single > use > >>>>> case for YAML layout. Second, AbstractJacksonLayout renders stack > >> traces > >>>> in > >>>>> a nested fashion — i.e., nested objects for JsonLayout, nested XML > >>>> elements > >>>>> for XmlLayout. Such arbitrarily nested structures are difficult to > >>>> interact > >>>>> with and no storage engine that I know of is able to index them > >>>>> sufficiently. Hence, given the way stack traces are rendered, I am > >> pretty > >>>>> confident that nobody is looking at them. > >>>>> > >>>>> If there is anybody out there using JsonLayout, I presume they can > >> easily > >>>>> migrate to JsonTemplateLayout without breaking a sweat. If we receive > >>>>> complaints regarding XML and YAML layouts, we can re-introduce them > >>>> easily. > >>>>> 3.0.0 release is a good opportunity to deprecate these modules. > >> Otherwise > >>>>> we will need to maintain them for another ~5 years. > >>>>> > >>>>> @Gary, is it possible for you to figure out who was using XmlLayout? > >>>>> > >>>>> On Wed, Dec 30, 2020 at 4:38 AM Ralph Goers < > >> ralph.go...@dslextreme.com> > >>>>> wrote: > >>>>> > >>>>>> Volkan, I am fine with deleting those modules however that would > >> require > >>>>>> that you make sure that you replace the existing Layouts with ones > >> that > >>>> use > >>>>>> JsonTemplateLayout templates, take the same configuration parameters > >> and > >>>>>> produce the same results. > >>>>>> > >>>>>> In other words, when people move from 2.x to 3.x we want to minimize > >> the > >>>>>> changes they have to make to their applications. All existing > >>>>>> configurations should continue to work. Custom Plugins should > require > >>>>>> recompilation but nothing more. Hopefully that would cover 95% of > our > >>>> users. > >>>>>> > >>>>>> Ralph > >>>>>> > >>>>>>> On Dec 29, 2020, at 2:52 PM, Volkan Yazıcı < > volkan.yaz...@gmail.com> > >>>>>> wrote: > >>>>>>> > >>>>>>> Hello, > >>>>>>> > >>>>>>> I propose deleting all the following 4 modules from master: > >>>>>>> > >>>>>>> log4j-layout-jackson > >>>>>>> log4j-layout-jackson-json > >>>>>>> log4j-layout-jackson-xml > >>>>>>> log4j-layout-jackson-yaml > >>>>>>> > >>>>>>> The most (only?) used one, JsonLayout, is, IMHO, superseded by > >>>>>>> JsonTemplateLayout. The rest, I believe, is not even used. If we > >> happen > >>>>>> to > >>>>>>> receive requests, we can consider adding them again. Thoughts? > >>>>>>> > >>>>>>> Kind regards. > >>>>>>> > >>>>>>> *P.S.* No, I did not forget about the report on Online Drinks #1. I > >>>> will > >>>>>> do > >>>>>>> that sometime this week. > >>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > >>>> > >> > >> > >> > >