On Apr 3, 2007, at 9:33 AM, Jess Holle wrote:

Largely I won't disagree.

That said, I think there is a point to having a new log4j version that is almost entirely API (source and binary) compatible with log4j 1.2.14, but: Has finer-grained synchronization and eliminates some possibilities that currently exist for deadlocks, etc.
Uses modern JVM features to reduce scalability bottlenecks, etc.
I think log4j 1.2.14 is "as good as it gets" (or needs to) for JVMs up to Java 1.4, but that there should be a compatible option that is optimized for Java 5 and higher (or at least assumes good ThreadLocal, etc, and takes advantage of these at a bare minimum).

When I say "almost entirely" I mean API compatible wherever possible while attaining item #1 above at least. This may break some extensions (3rd-party appenders, etc), but that seems like a reasonable price to pay. These can be updated (as long as what's needed to do so is clearly spelled out) or those needing them can stay at 1.2.14.


Any rework that addressed the synchronization and scalability issues would almost certainly break the (largely implied) contracts that extension appenders, layouts, etc depend upon. log4j 1.2.x made little or no attempts to control where log4j could be extended: very few classes if any are final and the implementation details are visible, and so anything but small feature additions can break some potential extension. I would expect that any attempt to address the synchronization issues would abandon any attempt to be compatible with existing extensions but could provide a shim that could be used to emulate the "client" portions of the log4j 1.2.x API.

Use of ThreadLocal and other incremental improvements could be done in a log4j 1.x, but I don't know whether we'd want to do that as a 1.2.x or a log4j 1.4.


Why the insistence on API compatibility? This would allow the vast majority of developers to simply code for "log4j" and ignore 1.2.x vs. 1.3.x or 2.0.x distinctions and thus avoids fracturing log4j's mindshare. Instead deployers could simply decide on the version of log4j that best met their needs, e.g. old JVM compatible or not, etc.


Not sure I'm following. If a version implies compatibility with a previous version (only a minor revision in version number and same package names), then breaking existing clients that were perfectly legal and function with the earlier versions is extremely bad form. See http://wiki.eclipse.org/index.php/Evolving_Java-based_APIs. Basically for log4j 2.0, I think that we are left with the "start over in a new package" approach. However, we could provide shim with a emulation of a subset of the old API that could be used at the client's own risk.


On Apr 3, 2007, at 12:03 PM, Gary Gregory wrote:

We currently use 1.3 Alpha-7 and it works pretty well for us, my preference as a user would be to clean up the current alpha for release as 1.3 or call it 2.0 if it is not binary compatible with the latest 1.2.14.

Rebranding log4j 1.3 as log4j 2.0 and then having log4j 3.0 as the designed for JDK 1.5+ and fine grained concurrency release was toyed with a few years ago, but the consensus was that log4j could only pull off one big API incompatible release and not two successive ones. Would be interesting to know what features you are using in log4j 1.3 and whether they could be backported to log4j 1.2.


In general, I dislike "big bang" releases and favor instead release early, release often, a la XP.


Unfortunately, log4j 1.3 development proceed for a substantial amount of time with little concern with compatibility with compatibility with log4j 1.2 and the primary developer of log4j 1.3 has left for other projects. We are left trying to remedy the situation we are in. There have definitely been incremental releases in the log4j 1.2.x branch and may continue to be so, but the code is very dated and extremely difficult to modify without potential compatibility issues.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to