So, again we are at an impasse it would seem. Paul, Gary, Nick, Remko all want to rename these, Ralph opposes.
I /kind of/ see where Ralph's coming from here: - log4j-slf4j-impl, called "SLF4J Binding," is an actual SLF4J implementation. The SLF4J team calls them "bindings." This, the name "SLF4J Binding" does make some sense. However, I would thus submit that the artifact name log4j-slf4j-binding makes more sense that log4j-slf4j-impl. However, I still think "Bridge" makes sense here. It's a bridge between the SLF4J API and the Log4j implementation. Think about it this way: log4j-slf4j-impl isn't actually an implementation/binding of SLF4J because it doesn't actually write anything; it's a bridge between the SLF4J API and the Log4j implementation and takes the place of an SLF4J implementation. - log4j-jcl, already called a bridge, Ralph agrees is a bridge. I fail to see a real difference between bridging the Commons API to Log4j and bridging the SLF4J API to Log4j. If the Commons Logging team decided to create an implementation, this bridge component wouldn't actually change. Thus, I submit, it would still be a bridge. Either way, Ralph agrees it's a bridge but opposes renaming the artifact as such. - Ralph's argument for log4j-1.2-api makes the most sense to me. Unlike the other two components, which require the SLF4J API JAR and Commons Logging API JAR, respectively, log4j-1.2-api /replaces/ the Log4j 1.2 JAR. Users DO NOT and SHOULD NOT include the Log4j 1.2 artifacts on their class path when using this component. Thus, this really is the Log4j 1.2 API and not a bridge between that and Log4j 2. So then, admittedly later than I should have, I looked up the Bridge Pattern and the Adapter Pattern. (The Wikipedia articles on these are useful.) Gamm, Helm, Johnson and Vlissides's "Design Patterns" (1995, Addison-Wesley) says the Bridge Pattern is meant to "decouple an abstraction from its implementation so that the two can vary independently." Well, that's not exactly what's going on in all of these cases. In fact, that really just describes the relationship between the Log4j 2 API and the Log4j 2 Core. The Adapter Pattern, on the other hand, translates one interface for a class into a compatible interface (Freeman, Frooman, Kathy, and Bates. "Head First Design Patterns." O'Reilly. 2013.). That's not exactly what's going on in all of these cases, either. Based on all this info, if I had to describe these three components to someone I would do it thusly: - SLF4J API Bridge - Commons Logging API Bridge - Log4j 1.2 API Adapter Based on the "official" definition of these patterns, I think these terms are accurate. I also think that using the same term for the Log4j 1.2 component could be a problem, because it may lead users to think they need the old Log4j JARs just like they need the SLF4J and Commons Logging JARs. However, I DO think that using a different term for the SLF4J and JCL components could be just as confusing for users. Therefore, I propose: - "log4j-1.2-api" becomes "log4j-1.2-api-adapter" and is named "Log4j 1.2 API Adapter" (leaving API in named to stress that it replaced Log4j 1 JAR) - "log4j-jcl" becomes "log4j-jcl-bridge" and is named "Commons Logging API Bridge" - "log4j-slf4j-impl" becomes "log4j-slf4j-bridge" and is named "SLF4J API Bridge" That's my $0.02. We're still left with Ralph's opposition, and I'll leave it up to the big wigs to decide this one. Nick On Jul 18, 2013, at 12:13 AM, Ralph Goers wrote: > Also, "binding" is the term SLF4J uses for implementations of its API, so > that should make sense to SLF4J users looking for implementations. Log4j 1.2 > is an implementation of that API - the "real" log4j 1.x jars should not be > used. The JCL bridge is exactly that, a bridge between the Commons Logging > jar and Log4j 2 (the commons logging jar is required). On Jul 18, 2013, at 12:07 AM, Ralph Goers wrote: > We have already renamed these at least twice. Just leave them be. > > Sent from my iPad On Jul 17, 2013, at 10:16 PM, Paul Benedict wrote: > So much better. > > > On Wed, Jul 17, 2013 at 10:12 PM, Gary Gregory <[email protected]> wrote: > > On Jul 17, 2013, at 22:40, Nick Williams <[email protected]> > wrote: > >> Yea I think we all go that. Important part is: >> >> - "log4j-1.2-api" becomes "log4j-1.2-bridge" and is named "Log4j 1.2 Bridge" >> - "log4j-jcl" becomes "log4j-jcl-bridge" and is named "Commons Logging >> Bridge" >> - "log4j-slf4j-impl" becomes "log4j-slf4j-bridge" and is named "SLF4J Bridge" >> >> Consistency is a good thing, and it helps users out by not confusing them. > > Yes! Preach on brother :) +1 > > Gary >> >> Nick >> >> On Jul 17, 2013, at 9:35 PM, Remko Popma wrote: >> >>> Small correction: I'd like to rename the log4j-1.2-api jar to >>> log4j-1.2-bridge-2.0.jar (without api in the name). >>> >>> >>> Sent from my iPhone >>> >>> On 2013/07/18, at 11:07, Remko Popma <[email protected]> wrote: >>> >>>> Currently we have three different names for things that provide a >>>> bridge/adapter from other logging APIs to the Log4j2 implementation: >>>> (Commons Logging) Bridge, (Log4j 1.2) API, and (SLF4J) Binding. >>>> >>>> Would it be a good idea to call them all "Bridge"? >>>> >>>> On the web site, components would then become: >>>> Commons Logging Bridge, Log4j 1.2 Bridge, and SLF4J Bridge. >>>> >>>> The jar files would become: >>>> log4j-jcl-bridge-2.0.jar >>>> log4j-1.2-api-bridge-2.0.jar >>>> log4j-slf4j-bridge-2.0.jar >>>> >>>> I would especially like to rename log4j-1.2-api-2.0.jar so we only have >>>> one jar with "api" in the name. >>>> >>>> Thoughts? >> > > > > -- > Cheers, > Paul --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
