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]>