On Sep 15, 2006, at 10:24 PM, Scott Heaberlin wrote:

I probably should post this to the log4j-dev list, but I figured there
might be other log4j users out there wondering this same thing.

What is the status of log4j 1.3?  I was wondering why I felt such
deja-vu writing this, then I recalled an old e-mail... dated mid 2004.

http://marc.theaimsgroup.com/?l=log4j-dev&m=108138515925098&w=2

Is there something in particular holding up a release?  No offense,
but I seem to recall during the 1.2.9 vote (I think, could be off
here) hearing that there were no more 1.2 branch releases.  In fact,
the website (http://logging.apache.org/log4j/docs/plan.html) states
this.  Yet right now, 1.2.14 is up for vote.  I don't have anything
against the 1.2 branch; its output has saved me countless hours of
troubleshooting over the years.  It seems like every few months I have
a business need in an application to support centralized logging...
and oh I wish I could use receivers... but I can't.

I'm one of those developers who works in a shop that frowns on beta /
pre-"release" libraries so I'm unable to use log4j 1.3 yet.  I've been
hearing & reading about senders/receivers, domains, joran
configurator, and other nifty features - but I still can't use them.

I have the utmost respect for the log4j dev team - like I said I've
accomplished a lot with the 1.2 branch over the last few years.  But I
gotta ask... are we really going to see 1.3?


Respectfully yours,


-Scott


I expect to prepare a log4j 1.3 alpha 9 release shortly. log4j 1.2.14 was a priority since 1.2 is in production use and the locking problems with AsyncAppender had apparently been substantially reduced or hopefully eliminated with the rewrite of AsyncAppender in the trunk and backporting it to the v1_2-branch.

As part of the log4j 1.2.14 release, I synchronized the documentation between the 1.2 branch and the trunk (aka 1.3). While reviewing the docs, it was clear that both the roadmap in the log4j 1.2 branch and trunk were seriously dated. I attempted to write a "roadmap" that while it is pretty non-committal, but gives at least a more realistic appraisal of the state of things. Here is a quote from the plan.html in the 1.2.14 release candidate:




The Roadmap

This page documents that roadmap and gives you an idea of what to expect from future versions and timeframes for release.

Our users keep inventing better ways and adding new requirements. The downside is that our todo list keeps growing. The upside is that there is plenty of work to go around. If you are interested in participating, send an email on the log4j-dev@ mailing list stating your interest. You'll be promptly enrolled. We're always looking for help! Don't be put off if in the "Volunteer" column already has a person listed. Programming is fun, especially if it is done in a team.

Release 1.2.15

Expected timeframe: As needed

log4j 1.2.14 was released in September 2006. log4j 1.2 is continuing to be maintained in response to reported problems*, but no active development is anticipated in the near future. Backporting the org.apache.log4j.rolling package from log4j 1.3 might be desirable since usage problems with the original org.apache.log4j.RollingFileAppender and org.apache.log4j.DailyRollingFileAppender are commonly reported.

Release 1.3

Expected timeframe: indeterminate

Compatibility with earlier releases (as implied by a minor verion number change) was not enforced during the development process and much of the recent effort has been to restore compatibility. However, it does not seem likely that log4j 1.3 will ever been sufficiently compatible with log4j 1.2 to recommend it as a general replacement for log4j 1.2. Additional alpha releases are expected, however it is possible that the development focus may shift to log4j 2.0.

Release 2.0

Expected timeframe: indeterminate

log4j 2.0 is still conceptual but would be designed for Java 5 and later, would use be designed for fine-grain concurrency to maximize performance on multi-processor systems, would minimize exposure of implementation details and adhere to current Java coding practices. The design of log4j 2.0 may attempt to support javax.util.logging by allowing, for example, a log4j 2.0 Appender to serve as a javax.util.logging.Handler. log4j 2.0 would likely be modularized, possibly using OSGi and would include a facade that emulates the log4j 1.3 API but would not be compatible with user written appenders and other components.

* - "problems" or "bugs" should have appeared at this spot, but was inadvertently omitted.

I would not stand in the way of any one who wants to push log4j 1.3 to completion. However as a volunteer, I do have control over the tasks that I personally take on. At the moment, the most appealing course of action for my personal involvement is to get another 1.3 alpha out, a log4cxx build out and then turn my focus to log4j 2.0. I think the timeline to an production quality log4j 2.0 is shorter and more beneficial to the community than throwing more effort on log4j 1.3.

My issues with log4j 1.3 advancing to beta or release:

Remaining compatibility issues with log4j 1.2:

While binary compatibility issues have been substantially reduced, there are still some remaining, for example, extended DOMConfigurator's would not be expected to work. While that may not have been an intended extension point, it had not been prohibited by making the class or methods final. In addition, there are intentional behavioral compatibility issues that would cause an application that works fine with log4j 1.2 to fail to work with log4j 1.3. The most prominent is the enforcement that appenders that previously worked without a call to activateAppender() now require calls to activateAppender(). Those types of compatibility issues seem unacceptable for what is labeled a minor release of a production product.

One quick solution to the compatibility issue would be to change the package name so that promise is that the implementation is mostly source code compatible instead of highly compatible. However, I believe that NLOG4J (http://www.slf4j.org/nlog4j/) already fits that description as my understanding is that it was a log4j 1.3 fork with essentially only the package names changed.

New features that partially replicate JDK classes:

I believe the Scheduler would fit into this as it appears to replicate a class in java.util.concurrent package what was incorporated in JDK 1.5 and I believe was available in JDK 1.4. Scheduler has been failing its unit tests on Gump for quite some time, so either it or the tests have some problems that would need to be addressed before a production quality release. org.apache.log4j.helpers.MessageFormatter does message formatting using a syntax similar to but not compatible with java.text.MessageFormat which has been available in since early JDK's. The rationale for the independent implementation and variant syntax was performance, however benchmarking the MessageFormat implementation in the formatter sandbox project (which use an optimized implementation for simple patterns and delegates to the JDK class for more complex patterns) shows that a MessageFormat compatible syntax can offer equivalent performance.

Review of new features:

Quite a few features were added without much or any previous discussion. Even it there had been discussion at the time, it would be prudent to carefully review all API additions before committing to supporting them.

Concurrency:

log4j 1.3 does not make significant changes in the coarse grain concurrency (basically only one message can be dispatched and formatted at a time) from earlier log4j's and it is unlikely that it could do so without introducing compatibility issues. Also keeps antiquated practices of synchronizing access to StringBuffers and the like instead of creating new instances. While it offered performance benefits in earlier JDK's, the performance benefit has been reduced or eliminated while still retaining the synchronization downside.

Coding practices:

Lack of use of private and final qualifiers where they would have been appropriate makes it difficult to change implementations.

In light of these and other problems, my opinion is the best path forward is continue to maintain log4j 1.2 as the stable offering and final stable offering for JDK 1.4 and earlier. Offer log4j 1.3 as an experimental product but don't imply that you can mix and match log4j 1.2 and log4j 1.3 on the classpath or swap them out without risk. Start sandbox architectural experiments for log4j 2.0 (actually strictxml and formatter might already be considered to architectural experiments for log4j 2.0) and target JDK 1.5 and later.


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

Reply via email to