Hi everyone,
In addition to many performance improvements, bug fixes, and other small enhancements, log4j 1.2 adds JMX support, Mapped Diagnostic Contexts, JDBC logging, graphical log viewer (chainsaw), and buffered IO capability. One important change is the replacement of the Category class with Logger class and the Priority class with the Level class in order to facilitate migration from the JDK 1.4 logging API to log4j. Version 1.2 is the 22nd major public release of log4j. All changes except the removal of deprecated methods are backward compatible such that log4j 1.2 can be considered a drop in replacement for log4j 1.1.3. The only exception is the renaming of the CategoryFactory class to LoggerFactory class such that subclasses of Category class to be modified and recompiled. By the way, we strongly discourage casual users from subclassing the Category or Logger classes. The history file reads: - Version 1.2 (rc1) - The ANT build script was modified to use jar files specified in the build.properties file instead of the CLASSPATH environment variable. The build.properties file depends on local paths and is supplied by the user. The build.properties.sample file is included in the distribution. The build.sh and build.bat scripts have been removed. This is the way many other jakarta projects build their projects. The jar files in the dist/lib directory were also removed since they are no longer used. [*] - The DOMConfigurator now interprets the string after the '#' character in the value attribute within the <level> element as the fully qualified class name of a custom Level. This is consistent with the way log4j handles "level" values in other places. The class attribute is still honored. [*] - Added Oliver Burn's chainsaw tool to the core log4j distribution. Visualisation and dynamic filtering of log events is bound to be a very important area of activity in the future. [*] - Added the org.apache.log4j.jdbc.JDBCAppender which as the name indicates sends events to a database using the JDBC API. Thanks to Kevin Steppe for supplying the code. [*] - Added SocketHubAppender class as contributed by Mark Womack. This appender sends LoggingEvent objects to a set of remote a log servers. [*] - In the Category class, the getChainedPriority method has been replaced with getEffectiveLevel method. [*] (beta4) - Replaced the custom class loading based on the thread context class loader with a simple Class.forName() call. This solves two allied but distinct problems encountered when using Ant with JUnit although the bug is more general. In one instance of the problem, log4j would throw java.lang.NoClassDefFoundError for org/apache/log4j/AppenderSkeleton where log4j.jar and related classes were clearly available to the Ant classloader. In another incarnation, log4j would reject a custom appender claiming that it is not assignable to a org.apache.log4j.Appender variable. This would occur when log4j.jar was available to both the Ant classloader and the system classloader. Thanks to Dave Herman for providing detailed scenarios exposing the issues involved. See http://forum.java.sun.com/thread.jsp?forum=38&thread=70946 http://forum.java.sun.com/thread.jsp?forum=38&thread=70946#479697 http://marc.theaimsgroup.com/?l=ant-user&m=101139178705895&w=2 for more details. [*] (beta3) - Fixed the complaints the compiler issued when using the Logger.setLevel() methd. [*] - Incorporated the performance enhancements to ISO8601DateFormat and AbsoluteTimeDateFormat classes submitted by Andrew Vajoczki. (beta2) - Source code written for log4j 1.1.3.jar will compile fine with log4j 1.2X. However, code compiled for log4j 1.1.3 would previously systematically throw "java.lang.NoSuchMethodError" runtime exceptions when run with log4j 1.2 - prior to beta2. This problem has been corrected in beta2. Pheew, that was a close one. [*] - Log4j 1.2 is now backward compatible in serialization of LoggingEvents. For example, a 1.1.3 SocketAppedner can write to 1.2 SocketServer. Similarly a 1.2 JMSAppender will work with 1.1.3 JMSSink. This should ease the move to log4j 1.2, especially in large deployments. [*] (alpha7) - The src/java/org/apache/log4j/examples/ directory moved under the top-level directory as examples/. [*] - Fixed the ArrayIndexOutOfBoundsException that was thrown by AsyncAppender if multiple threads were trying to log an event containing an exception near simultaneously. Thanks to Thomas Tuft Muller for reporting this bug. [*] (alpha1-alpha6) - Improved error reporting in DOMConfigurator. Thanks to Thomas Tuft Muller for contributing the enhancement. [*] - Log4j is now configurable using JMX. JMX support is not of production quality. [*] - Added support for different encodings in WriterAppender. Thanks to Ben Sandee for submitting the relevant patch. [*] - Modified SMTPAppender to allow multiple email sessions. Thanks to Jon Skeet for supplying the relevant patch. [*] - The CategoryFactory class has been replaced by the LoggerFactory class. The makeNewCategoryInstance method has been renamed as makeNewLoggerInstance. This change requires subclasses of Category classes to be modified and recompiled. [**] - The Level class replaced the Priority class. Priority class now extends Level to preserve backward compatibility. [*] - The Logger class replaced the Category class. Logger class extends Category to preserve backward compatibility. We proudly mark this change with a single star for 100% compatibility. [*] - The Category.assert method has been replaced by Category.assertLog. This change was necessary because assert is a language reserved word in JDK 1.4. [*/**] - Removed deprecated methods setOptions and getOptionStrings defined in the org.apache.log4j.spi.OptionHandler interface. This interface is implemented by most log4j appenders and layouts. In particular, all appenders and layouts shipped with log4j contain these deprecated methods. They have become totally redundant after we moved to JavaBeans style configuration in log4j 1.1. [**] - The disable(Level) methods in Hierarchy have been removed and been replaced by threshold methods. [**] - Added buffered IO capability to FileAppender and subclasses. [*] - The location information (or stack information) was not correctly transmitted by JMSAppender. [*] - Added event reporting capability to the Hierarchy class. - Added new system property "log4j.configuratorClass". This property allows the user to specify the custom configurator at the default initialization phase. This property replaces the previous interpretation of the reference part of "log4j.configuration" as the custom configurator class. This interpretation was sometimes erroneous and caused headaches. [*] - Introduced the Mapped Diagnostic Context or MDC class. This class is similar to the NDC except that the diagnostic context is based on a map instead of a stack. Moreover the MDC is automatically inherited by child threads under JDK 1.2 and above. [*] - Corrected a performance bug in the NDC class as observed by Dan Milstein and independently by Ray Millard. [*] - Removed deprecated methods disable(Priority), disableAll, disableDebug, disableInfo and enableAll in BasicConfigurator. [*] - Added supports java.io.Reader objects in the method doConfigure(), instead of only InputStream. Thanks to Mark Womack for submitting the relevant patch. [*] - Corrected the restart bug in DayliRollingFileAppender. Thanks to Jim Moore for supplying the relevant patch. [*] -- Ceki -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>