|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | contributor license agreements.  See the NOTICE file distributed with | 
|  | this work for additional information regarding copyright ownership. | 
|  | The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | (the "License"); you may not use this file except in compliance with | 
|  | the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the License is distributed on an "AS IS" BASIS, | 
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | See the License for the specific language governing permissions and | 
|  | limitations under the License. | 
|  |  | 
|  | --> | 
|  | <document> | 
|  | <properties> | 
|  | <title>Apache log4j 1.2</title> | 
|  | </properties> | 
|  | <body> | 
|  | <release version="1.2.17" date="2012-05-06" description="Maintenance release"> | 
|  | <action issue="49470">log4j 1.2.17 release preparation</action> | 
|  | <action issue="52913" action="add" dev="ggregory">Configure from an InputStream</action> | 
|  | <action issue="51597" action="fix">JDBCAppender not closed due to SQL Exception while executing an SQL (thanks to Anurag Agarwal)</action> | 
|  | <action issue="50486" action="fix">Memoryleak - org.apache.log4j.helpers.ThreadLocalMap</action> | 
|  | <action issue="48588" action="fix">DOMConfigurator does not close input stream when configured based on URL.</action> | 
|  | <action issue="49078" action="fix">javadoc.jar was missing NOTICE and LICENSE and contained .svn entries.</action> | 
|  | <action issue="50238" action="fix">Wrong log levels logged with serialized LoggingEvent.</action> | 
|  | <action issue="51766" action="add">Add org.apache.log4j.rewrite.RewriteAppender and org.apache.log4j.util.UtilLoggingLevel from discontinued receivers companion.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.16" date="2010-04-06" description="Maintenance release"> | 
|  | <action issue="43313">log4j 1.2.16 release preparation.</action> | 
|  | <action action="add" issue="42842">Create a public identifier for log4j.dtd ("-//APACHE//DTD LOG4J 1.2//EN")</action> | 
|  | <action action="fix" issue="44108">TelnetAppender misses messages when one of many clients disconnect.</action> | 
|  | <action action="fix" issue="44109">TelnetAppender throws null pointers at log time when socket couldn't be opened.</action> | 
|  | <action action="fix" issue="44032">ThrowableInformation.getThrowableStringRep can return null strings.</action> | 
|  | <action action="fix" issue="43298">log4j.dtd defines class attribute for category element, but not for logger.</action> | 
|  | <action action="fix" issue="43314">SMTPAppender.setSMTPUserName and others missing @since tags.</action> | 
|  | <action action="fix" issue="43618">Request for compile-on-Windows help file in src package.</action> | 
|  | <action action="fix" issue="43599">AsyncAppender failing on changing message objects.</action> | 
|  | <action action="fix" issue="43325">Subst-mechanism in DOMConfigurator broken.</action> | 
|  | <action action="fix" issue="43374">DailyRollingFileAppender may lose messages during failed rollover attempts.</action> | 
|  | <action action="fix" issue="43312">Fix mangled source-repository.html.</action> | 
|  | <action action="fix" issue="43387">Minor documentation changes.</action> | 
|  | <action action="fix" issue="43304">Make javamail, jmx, jms dependencies optional in pom.xml.</action> | 
|  | <action action="add" issue="43874">SocketHubAppender should expose actual port in use to extending classes.</action> | 
|  | <action action="add" issue="44551">SocketHubAppender in the 1.2.16 does not support a scroll back buffer or application property</action> | 
|  | <action action="add" issue="41156">Give log4j threads reasonable names.</action> | 
|  | <action action="fix" issue="44888">LocationInfo can report wrong caller when other class names contain logger class name as substring.</action> | 
|  | <action action="fix" issue="45426">ErrorHandlerTestCase is not run and does not pass.</action> | 
|  | <action action="fix" issue="45485">Agent.java is sole dependency on jmxtools.jar with Java 5+.</action> | 
|  | <action action="fix" issue="44517">Eliminate compile dependency on non-redistributable JMS reference implementation.</action> | 
|  | <action action="fix" issue="37182">Exception in call to toString of message propagates to caller.</action> | 
|  | <action action="fix" issue="45299">Javadoc class index corrupted by JDBCAppender deprecation warning.</action> | 
|  | <action action="fix" issue="43867">Improve warning message when log4j is accessed after unload by Tomcat.</action> | 
|  | <action action="fix" issue="45335">NullPointerException in NDC.remove after unload by Tomcat.</action> | 
|  | <action action="fix" issue="36384">Configuring triggering/rolling policies should be supported through properties.</action> | 
|  | <action action="fix" issue="25747">More explanations when hitting WARN No appenders could be found for logger.</action> | 
|  | <action action="fix" issue="45039">Use Throwable.getStackTrace to obtain location when running on JDK 1.4 or later.</action> | 
|  | <action action="fix" issue="44745">AsyncAppender fails on changing Throwable.</action> | 
|  | <action action="fix" issue="44899">Extra NPE error message when using missing appender class with DOMConfigurator.</action> | 
|  | <action action="fix" issue="44555">org.apache.log4j.varia.NullAppender lacks static accessor to static instance.</action> | 
|  | <action action="fix" issue="43849">Javadoc for Appender.getName implies that the return value will be unique and not null.</action> | 
|  | <action action="fix" issue="40888">Weekly rotation problem in Europe.</action> | 
|  | <action action="fix" issue="43282">Add OSGi packaging info.</action> | 
|  | <action action="fix" issue="44157">InterruptedIOException ignored by log4j.</action> | 
|  | <action action="fix" issue="40246">HierarchyDynamicMBean missing unregister MBean</action> | 
|  | <action action="fix" issue="45635">Support -Dm2_repo option on Maven build for non-default Maven repository location.</action> | 
|  | <action action="fix" issue="45636">2 tests for DateLayout are failing because of ill initialized DateFormat.</action> | 
|  | <action action="fix" issue="45659">Incorrect user mailing list URL.</action> | 
|  | <action action="add" issue="44386">NTEventLogAppender.dll for 64-bit editions for Microsoft Windows.</action> | 
|  | <action action="add" issue="45721">Add configuration of ThrowableRenderers and add org.apache.log4j.EnhancedThrowableRenderer.</action> | 
|  | <action action="fix" issue="45969">SMTPAppender does not force evaluation of message at request time</action> | 
|  | <action action="add" issue="25355">Support SSL transport in SMTPAppender</action> | 
|  | <action action="add" issue="45980">SMTPAppender should have a sendOnClose option</action> | 
|  | <action action="fix" issue="45982">Support %X layout specification to output all MDC key-value pairs</action> | 
|  | <action action="add" issue="45990">Add replyTo attribute to SMTPAppender</action> | 
|  | <action action="fix" issue="44644">SMTPAppender does not properly encode subject or content containing non-ASCII characters.</action> | 
|  | <action action="fix" issue="46388">Clarify javadoc of Layout.ignoresThrowable.</action> | 
|  | <action action="fix" issue="46271">SyslogAppender.append throws exception if layout is not set.</action> | 
|  | <action action="fix" issue="46144">QuietWriter.write should check for null argument.</action> | 
|  | <action action="fix" issue="46512">LogFactor5 CategoryPath doesn't replace slashes with dots.</action> | 
|  | <action action="fix" issue="46163">LoggerDynamicMBean needs to handle a null Appender name.</action> | 
|  | <action action="fix" issue="45704">DOMConfigurator.configure(URL) fails on JRE 1.5.0_16.</action> | 
|  | <action action="add" issue="44357">Document system properties used by log4j.</action> | 
|  | <action action="fix" issue="44038">log4j is susceptible to exceptions in Exception.printStackTrace.</action> | 
|  | <action action="fix" issue="46741">Misuse of "it's" in Javadoc for PatternLayout.</action> | 
|  | <action action="add" issue="47142">Add SMTPAppender.formatBody to simplify extension.</action> | 
|  | <action action="fix" issue="46404">Failure when toString() of throwable performs logging in SocketAppender, SocketHubAppender and JDBCAppender.</action> | 
|  | <action action="fix" issue="47465">Reading configuration files from a JAR locks the JAR file</action> | 
|  | <action action="add" issue="38061">PropertyConfigurator does not support configuring ErrorHandler.</action> | 
|  | <action action="fix" issue="47967">log4j.ignoreTCL should apply to the getResource method in addition to the loadClass method of org.apache.log4j.helpers.Loader.</action> | 
|  | <action action="fix" issue="46539">The QuietWriter class does not live up to its published contract.</action> | 
|  | <action action="add" issue="46983">More Debug output for log4j auto-configure requested.</action> | 
|  | <action action="add" issue="47107">Add MDC.clear().</action> | 
|  | <action action="fix" issue="47547">NullPointerException when calling Category.removeAllAppenders().</action> | 
|  | <action action="add" issue="28647">Allow overriding of flush strategy.</action> | 
|  | <action action="fix" issue="47350">Add recommendation to use EnhancedPatternLayout to avoid synchronization issues in PatternLayout</action> | 
|  | <action action="fix" issue="45481">Source contains unnecessary imports.</action> | 
|  | <action action="add" issue="48159">Add LoggingEvent.removeProperty</action> | 
|  | <action action="add" issue="48187">Typo ("two three goals") in log4j FAQ</action> | 
|  | <action action="fix" issue="48531">Unit tests fail for system dates after 2009-12-31</action> | 
|  | <action action="fix" issue="48604">Download page does not have link to KEYS file</action> | 
|  | <action action="add" issue="49812">Add parameterized logging utility classes LogMF and LogSF from extras companion.</action> | 
|  | <action action="add" issue="48927">Add EnhancedPatternLayout from extras companion.</action> | 
|  | <action action="fix" issue="48784">Links to example code broken in the JavaDocs</action> | 
|  | <action action="fix" issue="48953">Unused imports and variables in test code cause gcj compile warnings.</action> | 
|  | <action action="fix" issue="49002">Unit tests fail on Apache Harmony and gcj due to stack trace expectations.</action> | 
|  | <action action="fix" issue="49003">SocketServerTestCase.test8 fails on Apache Harmony.</action> | 
|  | <action action="fix" issue="49004">TestLogMF.testDebugDate fails on gcj.</action> | 
|  | <action action="fix" issue="49005">TelnetAppenderTest.testIt fails on gcj.</action> | 
|  | <action action="fix" issue="49006">Eclipse Java Compiler and gcj do not support -source=1.2.</action> | 
|  | <action action="fix" issue="49007">CachedDateFormatTest fails on Apache Harmony.</action> | 
|  | <action action="add" issue="49010">Add %p{-2} pattern to EnhancedPatternLayout to drop two leading elements from name.</action> | 
|  | <action action="add" issue="48902">Add %throwable{n} and {-n} pattern to EnhancedPatternLayout to print n or drop last n lines.</action> | 
|  | </release> | 
|  |  | 
|  |  | 
|  | <release version="1.2.15" date="2007-08-24" description="SyslogAppender enhancements, NTEventLogAppender and Maven build."> | 
|  | <action issue="40951">log4j 1.2.15 release preparation.</action> | 
|  | <action action="add" issue="40212">Switch to NOPLoggerRepository if application reloading nulls repositorySelector.</action> | 
|  | <action action="add" issue="43202">Add 'application' property support to SocketAppender (from 1.3)</action> | 
|  | <action action="fix" issue="43200">Log4JEntityResolver will return null if log4j.dtd can not be found on classpath.</action> | 
|  | <action action="fix" issue="37736">HierarchyEventListener.removeAppenderEvent never called.</action> | 
|  | <action action="fix" issue="37560">XMLLayout does not escape CDATA sections within NDC or throwables.</action> | 
|  | <action action="add" issue="33502">Added test to confirm that DOMConfigurator.configureAndWatch does configure.</action> | 
|  | <action action="fix" issue="32527">Default initialization with XML file halts program if JAXP not available.</action> | 
|  | <action action="add" issue="17531">Add reset option to PropertyConfigurator and DOMConfigurator.</action> | 
|  | <action action="fix" issue="14350">Error message always logged to LogLog when calling close on TelnetAppender.</action> | 
|  | <action action="add" issue="32572">Add configurable triggeringPolicy for SMTPAppender.</action> | 
|  | <action action="fix" issue="43181">NullPointerException in MDC on Tomcat reload.</action> | 
|  | <action action="fix" issue="34874">Notice to use UTF-8 or UTF-16 encoding added to XML and HTMLLayout javadoc.</action> | 
|  | <action action="fix" issue="34875">XML and HTMLLayout do not always escape special characters.</action> | 
|  | <action action="add" issue="43078">Optionally render MDC content in XMLLayout</action> | 
|  | <action action="fix" issue="42694">Typo in log4j.dtd concerning threshold.</action> | 
|  | <action action="fix" issue="42611">ERFATestCase fails on some JDK's.</action> | 
|  | <action action="fix" issue="42585">SocketNode can leak Sockets.</action> | 
|  | <action action="fix" issue="37930">Migrate to Maven based build and documentation.</action> | 
|  | <action action="fix" issue="40604">Prepare Maven release bundles.</action> | 
|  | <action action="fix" issue="42283">Eclipse compiler warning cleanup.</action> | 
|  | <action action="fix" issue="42281">JRockit VM and java-gcj fail unit tests.</action> | 
|  | <action action="fix" issue="21796">SocketAppender does not use FallbackErrorHandler</action> | 
|  | <action action="add" issue="42257">Enhance DOMConfigurator to delegate unrecognized elements to configured object.</action> | 
|  | <action action="add" issue="42108">Add LoggingEvent accessors.</action> | 
|  | <action action="fix" issue="42017">InstanceAlreadyExistsException using MBean.</action> | 
|  | <action action="fix" issue="29227">Reduce first connection failure severity in SocketAppender</action> | 
|  | <action action="fix" issue="42087">SyslogAppender does not limit packets to 1024 bytes.</action> | 
|  | <action action="fix" issue="41040">SyslogAppender: Added "header" property which if set to true will cause the appender | 
|  | to produce the HEADER part (timestamp and hostname) of the syslog packet. | 
|  | Default value is false for compatibility with previous behavior.</action> | 
|  | <action action="fix" issue="40161">SyslogAppender also now sends any header from the associated | 
|  | layout when activateOptions is called or first logging event is sent and | 
|  | any footer when the appender is closed.</action> | 
|  | <action action="fix" issue="37282">SyslogAppender leaks descriptors</action> | 
|  | <action action="fix" issue="40502">SyslogAppender assumes all lines start with tab</action> | 
|  | <action action="fix" issue="42087">SyslogAppender does not limit packet size to 1024 bytes</action> | 
|  |  | 
|  | <action action="fix" issue="41169">NTEventLogAppender: Updated NTEventLogAppender.dll which corrects missing event messages | 
|  | and which should work with earlier releases of log4j. | 
|  | NTEventLogAppender.dll also now supports registration and unregistration | 
|  | using regsvr32.  If replacing an existing copy of NTEventLogAppender, | 
|  | use "regsvr32 NTDllEventLogAppender.dll" or manually remove the | 
|  | HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/Log4J | 
|  | registry key.</action> | 
|  | <action action="fix" issue="39437">NTEventLogAppender.dll performs unnecessary code page conversion using code copied from book.</action> | 
|  | <action action="fix" issue="40944">PropertyConfigurator.configure(URL) does not close resource stream.</action> | 
|  | <action action="fix" issue="40937">In Turkish locale level "info" is not equivalent to "INFO"</action> | 
|  | <action action="fix" issue="41339">Javadoc of PatternLayout should use %n in TTCC layout examples</action> | 
|  | <action action="fix" issue="41219">Stacktraces of exceptions disappear occassionally</action> | 
|  | <action action="fix" issue="38680">Incorrect message when specified custom level class does not implement toLevel</action> | 
|  | <action action="fix" issue="41487">Warning when configuring inner-class logger</action> | 
|  | <action action="fix" issue="41186">AsyncAppender in 1.2.14 DiscardSummary events create NullPointerExceptions in layouts</action> | 
|  | <action action="fix" issue="37864">Add target to generate binary and source compatibility report</action> | 
|  | <action action="fix" issue="41708">PropertyPrinter.printOptions breaking signature change in log4j 1.2.9</action> | 
|  | <action action="fix" issue="41735">RollingFileAppender may delete files during rollover</action> | 
|  | <action action="fix" issue="33708">XMLConfiguration of loggerFactory does not work</action> | 
|  | <action action="fix" issue="42087">SyslogAppender does not limit packet size to 1024 bytes</action> | 
|  | <action action="fix" issue="40755">Update source per new ASF Header Policy.</action> | 
|  | <action action="fix" issue="41373">DateLayoutTest fails if default Locale is not en_US.</action> | 
|  | <action action="fix" issue="35324">Stacktrace may choke on null fields.</action> | 
|  | <action action="add" issue="41575">Add projects.apache.org project descriptor.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.14" date="2006-09-18" description="AsyncAppender rewrite, Syslog and SMTPAppender enhancements."> | 
|  | <action action="fix" issue="38137">Monitor deadlock in AsyncAppender.</action> | 
|  | <action action="fix" issue="28006">AsyncAppender: Dispatcher should run at normal prio.</action> | 
|  | <action action="fix" issue="37904">AsyncAppender wait forever when buffer is full.</action> | 
|  | <action action="add" issue="38982">Add non-blocking option for AsyncAppender.</action> | 
|  | <action action="add" issue="39687">Add SyslogPort option to SyslogAppender.</action> | 
|  | <action action="add" issue="19125">Add cc and bcc addresses to SMTPAppender.</action> | 
|  | <action action="add" issue="24969">Add password authentication to SMTPAppender.</action> | 
|  | <action action="fix" issue="40159"> NullPointerException in org.apache.log4j.NDC.get.</action> | 
|  | <action action="fix" issue="36787"> org.apache.log4j.lf5.util.DateFormatManager.setTimeZone assignment error.</action> | 
|  | <action action="fix" issue="38559"> Monthly logs not generated at midnight with DailyRollingFileAppender.</action> | 
|  | <action action="fix" issue="40145"> PatternLayout specifier %r is not consistent with documentation.</action> | 
|  | <action action="fix" issue="37119"> Space after log level causes default level to be used.</action> | 
|  | <action action="fix" issue="39135"> Bad patterns in ISO8601DateFormat and DateTimeDateFormat.</action> | 
|  | <action action="fix" issue="35743"> SyslogAppender throws NullPointerException upon misconfiguration.</action> | 
|  | <action action="fix" issue="15501"> FallbackErrorHandler throws NullPointerException if no loggers are set.</action> | 
|  | <action action="fix" issue="38564"> Bad documentation for WriterAppender.encoding.</action> | 
|  | <action action="fix" issue="37866"> NTEventLogAppender not build, tested and placed in distribution.</action> | 
|  | <action action="fix" issue="38662"> SMTPAppender does not output newlines between stack trace lines.</action> | 
|  | <action action="fix" issue="30294"> SMTPAppender will not run within sandbox.</action> | 
|  | <action action="fix" issue="16922"> MDC with SMTPAppender doesn't work.</action> | 
|  | <action action="fix" issue="31507"> Misspelling in HierarchyDynamicMBean.</action> | 
|  | <action action="fix" issue="35123"> Additivity not exported by PropertyPrinter.</action> | 
|  | <action action="fix" issue="31003"> RollingFileAppender, if removed, can cause NullPointerExceptions.</action> | 
|  | <action action="fix" issue="23021"> AsyncAppender blocks on thread death.</action> | 
|  | <action action="fix" issue="40412"> NOTICE file added to distribution and jars.</action> | 
|  | <action action="fix" issue="40378"> Chainsaw of log4j 1.2 does not show TRACE level.</action> | 
|  | <action action="fix" issue="40501"> TRACE level missing in short introduction to log4j.</action> | 
|  | <action action="fix" issue="37960"> Update site generation to velocity 1.4 and remove dependency on logging/site project.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.13" date="2005-12-04" description="TRACE level missing info fixed, ConsoleAppender.follow added to make redirection following an optional behavior."> | 
|  | <action action="fix" issue="36800">Location info missing for TRACE level messages.</action> | 
|  | <action action="fix" issue="37122">Console appender now behaves as before to fix | 
|  | compatibility problem with JBoss introduced in 1.2.12 release due to fix | 
|  | for bug 31056.  Can still be configured to detect changes in the System.out | 
|  | and System.err streams as needed by setting the follow property.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.12" date="2005-08-29" description="TRACE level introduced, ConsoleAppender modified to follow redirection of System.out"> | 
|  | <action action="fix" issue="36262">Removed final qualifiers on member variables | 
|  | in org.apache.log4j.chainsaw.LoggingReceiver which would cause | 
|  | spurious compiler errors with JDK 1.1 and 1.2 javac compilers.</action> | 
|  |  | 
|  | <action action="fix" issue="36267">Added a jndi.jar property to the build.xml.</action> | 
|  |  | 
|  | <action action="fix" issue="37268">Added "release" target to build.xml.</action> | 
|  |  | 
|  | <action action="fix" issue="36213">Removed references to obsolete documentation.</action> | 
|  |  | 
|  | <action action="fix" issue="35965">Added protected accessors for member variables | 
|  | topicConnection, topicSession, and topicPublisher.</action> | 
|  |  | 
|  | <action action="fix" issue="34026">SyslogAppender now checks Layout.ignoresThrowable() just | 
|  | like every other appender.</action> | 
|  |  | 
|  | <action action="fix" issue="35947">DOMConfigurator would call LogLog.error to report | 
|  | XML validation errors that caused no problems in the interpretation of the | 
|  | configuration file.</action> | 
|  |  | 
|  | <action action="fix" issue="14551">Fixed the JavaDoc links | 
|  | for the XML sample files.</action> | 
|  |  | 
|  | <action action="fix" issue="35654">Added getNext/setNext methods to org.apache.log4j.spi.Filter and deprecated | 
|  | public "next" field. This mirrors the same change in the upcoming 1.3 | 
|  | version and, hence, provides a migration path.</action> | 
|  |  | 
|  | <action action="fix" issue="35711">Added o.a.log4j.Logger.trace(), o.a.log4j.Logger.isTraceEnabled() and | 
|  | o.a.log4j.Level.TRACE</action> | 
|  |  | 
|  | <action action="fix" issue="34758">Implemented serialization for Level.</action> | 
|  |  | 
|  | <action action="fix" issue="31056">o.a.log4j.ConsoleAppender would ignore redirections | 
|  | of System.out and System.err that occurred after configuration.</action> | 
|  |  | 
|  | <action action="fix" issue="23705">o.a.log4j.xml.DOMConfigurator would not properly | 
|  | interpret relative path names in external entity declarations.</action> | 
|  |  | 
|  | <action action="fix" issue="35691">o.a.log4j.xml.XmlLayout would not properly escape | 
|  | class names that contained '<' or '>'.</action> | 
|  |  | 
|  | <action action="fix" issue="35052">Use of String.intern() in o.a.log4j.CategoryKey | 
|  | would cause application to slow down.</action> | 
|  |  | 
|  | <action action="fix" issue="9150">o.a.log4j.FileAppender would not create log file | 
|  | if parent directory did not exist.</action> | 
|  |  | 
|  | <action action="fix" issue="23021">o.a.log4j.AsyncAppender would deadlock if a | 
|  | unchecked exception occurred in the attached appender causing the | 
|  | dispatch thread to die.</action> | 
|  |  | 
|  | <action action="fix" issue="35516">Added jdiff target to build.xml.</action> | 
|  |  | 
|  | <action action="fix" issue="35831">log4j would not build with a JDK 1.5 javac.</action> | 
|  |  | 
|  | <action action="fix" issue="35893">Added log4j 1.1 compatibility method | 
|  | to o.a.l.helpers.Loader.</action> | 
|  |  | 
|  | <action action="fix" issue="34981">Additional null terminating character in Windows | 
|  | nteventlog.cpp code.</action> | 
|  |  | 
|  | <action action="fix" issue="36332">Broken links to J2SE classes in javadocs.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.11" date="2005-06-18" description="JMS MessageRenderer fix"> | 
|  | <action action="fix" issue="34491">o.a.log4j.or.jms.MessageRenderer | 
|  | would not be compiled in the build.jms target.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.10" date="2005-04-28" description="Version 1.2.10 was not released following the accepted rules and process of | 
|  | the log4j project and Logging Services Project and was recalled and removed. | 
|  | Please do not use version 1.2.10, it is not an official log4j release."> | 
|  | <action>Version 1.2.10 was not released following the accepted rules and process of | 
|  | the log4j project and Logging Services Project and was recalled and removed. | 
|  | Please do not use version 1.2.10, it is not an official log4j release.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.9" date="2004-11-01" description="Deprecation of obsolete methods"> | 
|  | <action>  Log4j version 1.2.9, is identical to version 1.2.8, except that | 
|  | several key methods have been deprecated in preparation for version | 
|  | 1.3.0, the next major release of log4j. These changes are intended to | 
|  | enforce the rule that client code should never refer to the Category | 
|  | class directly, but use the Logger class instead. Similarly, client | 
|  | code should not refer to the Priority class but to the Level class | 
|  | instead. | 
|  |  | 
|  | For a more detailed discussion, refer to the document entitled | 
|  | preparing for log4j 1.3 at: | 
|  |  | 
|  | http://www.qos.ch/logging/preparingFor13.jsp | 
|  | </action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.8" date="2003-02-19" description="Fixes to XMLAppender, DOMConfiguration, SocketAppender and JDBCAppender."> | 
|  | <action action="fix" issue="11570">XMLAppender would throw a | 
|  | NullPointerException if the input message was null. Many thanks to | 
|  | David Vandegrift for reporting the bug and to Hendrik Brummermann for | 
|  | supplying the patch.</action> | 
|  |  | 
|  | <action action="fix" issue="12366">Various versions of Xerces would not parse | 
|  | log4j configuration scripts expressed in XML format.</action> | 
|  |  | 
|  | <action action="fix" issue="14827">The "removes" buffer used in the flushBuffer() method | 
|  | of JDBCAppender is now cleared, solving the memory leak.  Thanks to John | 
|  | Landers for reporting the bug and suggesting the fix.</action> | 
|  |  | 
|  | <action action="fix" issue="15599">SocketAppender now honors ReconnectionDelay of 0. | 
|  | Many thanks to Scott Schram for reporting the bug and providing the fix.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.7" date="2002-10-09" description="log4j.xml now checked during default configuration."> | 
|  | <action>Log4j now searches for the file log4j.xml as well as the file | 
|  | log4j.properties during log4j initialization.</action> | 
|  | </release> | 
|  |  | 
|  |  | 
|  | <release version="1.2.6" date="2002-07-31" description="LoggingEvent.getLoggerName() added, JMSAppender enhancements."> | 
|  | <action action="add">Add of new options in JMSAppender and new command line arguments in | 
|  | JMSSink.</action> | 
|  |  | 
|  | <action action="add">Add new method getLoggerName() in LoggingEvent class. The | 
|  | getLoggerName is the preferred way for accessing the logger | 
|  | name. The public access categoryName field should not be accessed | 
|  | directly. Similarly, added the getLevel method which is now the | 
|  | preferred way of accessing the event's level. The public access | 
|  | level field should not be accessed directly.  The javadocs now mark | 
|  | the categoryName and level fields as deprecated. | 
|  | Modified existing appenders to comply with these new directives.</action> | 
|  |  | 
|  | <action action="fix">Log4j now will check if a system property named "log4j.ignoreTCL" | 
|  | is set. If it is set, then it will ignore the Thread Context | 
|  | ClassLoader when loading classes. This solves the irritating | 
|  | "appender is not assignable to Appender" messages observed when | 
|  | log4j.jar is loaded by multiple class loaders. | 
|  | The error reporting for this problem was also improved.</action> | 
|  |  | 
|  | <action action="fix" issue="10528">Calling the MDC.get method with a null | 
|  | argument would throw a NullPointerException.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.5" date="2002-07-05" description="AsyncAppender.close now closes nested appender."> | 
|  | <action action="fix" issue="10185">Calling an AsyncAppender close method also closes the embedded | 
|  | appender instances.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.4" date="2002-06-12" description="XMLLayout now handles embedded CDATA, JDBCAppender deprecated."> | 
|  | <action>The JDBCAppender is marked as slated for replacement. Do not build | 
|  | critical software using it.</action> | 
|  |  | 
|  | <action action="add">Add LF5 documentation and examples. Further tests are required | 
|  | for full integration.</action> | 
|  |  | 
|  | <action action="fix">XMLLayout can now output messages which contain embedded CDATA | 
|  | sections.Many thanks to Michael | 
|  | A. McAngus for supplying the relevant patch.</action> | 
|  |  | 
|  | <action action="fix" issue="9750">The dispatcher thread associated with AsyncAppender is now marked | 
|  | as a deamon thread.</action> | 
|  |  | 
|  | <action action="add" issue="9606">Add missing NTEventLogAppender.dll</action> | 
|  |  | 
|  | <action action="fix" issue="9435">log4j.dtd was changed so that | 
|  | <log4j:event> is now made of logger and level attributes instead of | 
|  | category and priority. Changed XMLLayout to conform to the | 
|  | DTD. Chainsaw was changed to adapt to the XMLLayout.</action> | 
|  |  | 
|  | <action action="add">Add missing LevelRangeFilter file.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.3" date="2002-05-24" description="SyslogAppender and stack trace fixes."> | 
|  | <action action="fix" issue="9285">SyslogAppender would incorrectly compute | 
|  | the length of the datagram to send to the remote syslogd host. | 
|  | Reported by Mamoru Kadota.</action> | 
|  |  | 
|  | <action action="fix" issue="8505">The stack trace of exception would not be | 
|  | properly printed on the Compaq tru64 Unix platform. Initially | 
|  | reported by Fabrice Claes and later by Espen H. Kolstad who also | 
|  | provided the fix.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.2" date="2002-05-22" | 
|  | description="NULL added as synonym for INHERITED in Configurators, Thread context loader used preferentially."> | 
|  | <action>Log4j configurators take the "NULL" string value as a synonym for | 
|  | "INHERITED". Both of these two strings are legal level values for | 
|  | setting the level of a logger. Both values are case insensitive.</action> | 
|  |  | 
|  | <action issue="9305">When loading component classes, log4j will now first attempt to use | 
|  | the Thread Context Loader and if that fails, it will use | 
|  | Class.forName. In log4j 1.2 and 1.2.1, only Class.forName was used | 
|  | and the TCL was ignored. This change is a response to bug #9305 | 
|  | opened by Scott M. Stark.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2.1" date="2002-05-17" | 
|  | description="Fixed MDC problem when used with AsyncAppender"> | 
|  | <action issue="9155" action="fix"> | 
|  | LoggingEvent.getMDCCopy() method now sets mdcCopyLookupRequired | 
|  | instead of ndcLookupRequired.  This bug would cause the wrong MDC | 
|  | information to appear on a log server. It could only occur if the | 
|  | client wrapped an AsyncAppender around a SocketAppender or if the | 
|  | server used an AsyncAppender for its logging.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.2" date="2002-05-01" description="Initial release of log4j 1.2"> | 
|  |  | 
|  | <action action="fix" issue="8527">A closed TelnetAppender would continue waiting | 
|  | for connections even if its ServerSocket was closed. This caused | 
|  | the TelnetSocket to sit in a loop and complain about the closed | 
|  | socket.</action> | 
|  |  | 
|  | <action action="fix" issue="5444">AsyncAppender throws NullPointerException problem. The bug was actually in | 
|  | AppenderSkeleton.</action> | 
|  |  | 
|  | <action action="add">Add support for recursive variable substiuton as requested by | 
|  | Eric Chastan.</action> | 
|  |  | 
|  | <action action="fix" issue="3933">SocketNode now used a BufferedInputStream as suggested by Kok Chong</action> | 
|  |  | 
|  | <action action="fix" issue="7550">Fixed a problem with DailiyRollingAppender which would not | 
|  | correctly compute the rollover period in certain timezones.</action> | 
|  |  | 
|  | <action action="fix" issue="2726">Fixed documentation bug #2726 in FAQ.html.</action> | 
|  |  | 
|  | <action action="fix" issue="2383">Added a flush statement in the | 
|  | WriterAppender.writeFooter method.</action> | 
|  |  | 
|  | <action action="fix">In XMLLayout, escaped the method attribute. The | 
|  | XMLLayout also outputs each item of a stack trace in a separate | 
|  | line.</action> | 
|  |  | 
|  | <action action="fix" issue="5932">The | 
|  | LoggingEvent.getMDCCopy method now clones the MDC instead of just | 
|  | referencing it.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action action="add">Add 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.</action> | 
|  |  | 
|  | <action action="add">Add 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.</action> | 
|  |  | 
|  | <action action="add">Add SocketHubAppender class as contributed by Mark Womack. This | 
|  | appender sends LoggingEvent objects to a set of remote a log | 
|  | servers.</action> | 
|  |  | 
|  | <action>In the Category class, the getChainedPriority method has been | 
|  | replaced with getEffectiveLevel method.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>Fixed the complaints the compiler issued when using the | 
|  | Logger.setLevel() method.</action> | 
|  |  | 
|  | <action>Incorporated the performance enhancements to ISO8601DateFormat and | 
|  | AbsoluteTimeDateFormat classes submitted by Andrew Vajoczki.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>The src/java/org/apache/log4j/examples/ directory moved under the | 
|  | top-level directory as examples/.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>Improved error reporting in DOMConfigurator. Thanks to Thomas Tuft | 
|  | Muller for contributing the enhancement.</action> | 
|  |  | 
|  | <action>Log4j is now configurable using JMX. JMX support is not of | 
|  | production quality.</action> | 
|  |  | 
|  | <action action="add">Add support for different encodings in WriterAppender. Thanks to | 
|  | Ben Sandee for submitting the relevant patch.</action> | 
|  |  | 
|  | <action>Modified SMTPAppender to allow multiple email sessions. Thanks to | 
|  | Jon Skeet for supplying the relevant patch.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>The Level class replaced the Priority class. Priority class now | 
|  | extends Level to preserve backward compatibility.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>The disable(Level) methods in Hierarchy have been removed and been | 
|  | replaced by threshold methods.</action> | 
|  |  | 
|  | <action action="add">Add buffered IO capability to FileAppender and subclasses.</action> | 
|  |  | 
|  | <action>The location information (or stack information) was not correctly | 
|  | transmitted by JMSAppender.</action> | 
|  |  | 
|  | <action action="add">Add event reporting capability to the Hierarchy class.</action> | 
|  |  | 
|  | <action action="add">Add 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.</action> | 
|  |  | 
|  | <action>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.</action> | 
|  |  | 
|  | <action>Corrected a performance bug in the NDC class as observed by Dan | 
|  | Milstein and independently by Ray Millard.</action> | 
|  |  | 
|  | <action>Removed deprecated methods disable(Priority), disableAll, | 
|  | disableDebug, disableInfo and enableAll in BasicConfigurator.</action> | 
|  |  | 
|  | <action action="add">Add supports java.io.Reader objects in the method doConfigure(), | 
|  | instead of only InputStream. Thanks to Mark Womack for submitting | 
|  | the relevant patch.</action> | 
|  |  | 
|  | <action>Corrected the restart bug in DailyRollingFileAppender. Thanks to | 
|  | Jim Moore for supplying the relevant patch.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1.3" date="2001-06-19" description="Added missing namespace and reduced size of log4j-core.jar."> | 
|  |  | 
|  | <action action="add">Add a missing namespace declaration in the log4j:configuration | 
|  | element in log4j.dtd. The missing declaration caused the new | 
|  | generation of namespace aware parsers to barf when parsing log4j | 
|  | configuration files.</action> | 
|  |  | 
|  | <action>Reduced the size of log4j-core.jar to 78KB.</action> | 
|  |  | 
|  | <action>Minor documentation changes.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="1.1.2" date="2001-06-07" description="Default initialization improvements"> | 
|  | <action>Corrected a problem with the static initializer of the Category | 
|  | class which would use the wrong class loader to search for the | 
|  | default configuration file.  The associated search algorithm has | 
|  | been also simplified. Nevertheless, the preferred method to specify | 
|  | the automatic configuration file is by setting the | 
|  | log4j.configuration system property.</action> | 
|  |  | 
|  | <action>Documentation improvements. Added a new section to the manual | 
|  | explaining the default initialization procedure</action> | 
|  |  | 
|  | <action>Enhancements to the org.apache.log4j.examples.appserver package.</action> | 
|  |  | 
|  | <action>Corrected a bug in the way the NTEventLogAppender printed | 
|  | exceptions.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1.1" date="2001-05-20" description="Added custom priority support to PropertyConfigurator, SMTPAppender visibility changes."> | 
|  | <action action="add">Add missing custom priority support in PropertyConfigurator.</action> | 
|  |  | 
|  | <action>Made a number of fields protected instead of default access in | 
|  | SMTPAppender.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1" date="2001-05-19" description="Minor documentation changes"> | 
|  |  | 
|  | <action>This release has the same code as 1.1b7. It differs only in a few minor | 
|  | documentation changes.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b7" date="2001-05-09"> | 
|  | <action>Made BasicConfigurator disable methods static as they were in log4j | 
|  | 1.0.4. Thanks to Francisco Marin for reporting the bug.</action> | 
|  |  | 
|  | <action issue="1505">Corrected a two related deadlock problems introduced while fixing | 
|  | bug 1505. Thanks to joelr@viair.com for reporting the problem.</action> | 
|  |  | 
|  | <action issue="1686">The configureAndWatch methods in Configurators did not close the | 
|  | configuration file, preventing its editing.</action> | 
|  |  | 
|  | <action>In DOMConfigurator.setParameter special character conversion now | 
|  | precedes variable substitution. This change was suggested by Steven | 
|  | Velez. The vast majority of users should be oblivious to it.</action> | 
|  |  | 
|  | <action>The TextPaneAppender is no longer maintained and has been | 
|  | removed.  It is still available under the contribs/ | 
|  | directory. This change has been discussed in the log4j mailing | 
|  | lists and no one objected to the removal of the TextPaneAppender | 
|  | class.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b6" date="2001-04-26"> | 
|  | <action issue="1505">Aaron Greenhouse from Carnegie Mellon SCS found a series of | 
|  | multi-threading related bugs in Category and AsyncAppender. See bug | 
|  | ids 1505 and 1507 in our bug database for exemplary bug | 
|  | reports. They are worth the detour.</action> | 
|  |  | 
|  | <action>InvalidJarIndexException is only available in JDK 1.3.  Referring | 
|  | to this exception type caused log4j 1.1b5 to break on earlier JDKs. | 
|  | We now avoid referring to it.</action> | 
|  |  | 
|  | <action action="add">Add PriorityRangeFilter by Simon Kitching. See the Threshold | 
|  | option in AppenderSkeleton for a more convenient alternative.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b5" date="2001-04-22"> | 
|  | <action>In HTMLLayout, the Title option sets the HTML document | 
|  | title (<title>...<title>).</action> | 
|  |  | 
|  | <action>Corrected an important performance bug in LocationInfo. Hein Couwet | 
|  | and kr@it-practice.dk have independently identified the bug. This is | 
|  | yet another example of the difference made by the number of eyeballs | 
|  | studying source code.</action> | 
|  |  | 
|  | <action>Corrected the incorrect value returned by LocationInfo.getClassName | 
|  | method when running under IBM Visual Age. Thanks to Mathias | 
|  | Rupprecht for supplying the relevant patch.</action> | 
|  |  | 
|  | <action>Corrected a bug where the build.sh file in the distribution would be in | 
|  | DOS CRLF format. Thanks to ma.darche@free.fr for reporting the | 
|  | problem.</action> | 
|  |  | 
|  | <action>Corrected InvalidJarIndexException thrown in applets while | 
|  | searching for the default log4j configuration file. Thanks to | 
|  | Michael Lundahl for reporting this bug.</action> | 
|  |  | 
|  | <action action="add">Add missing PropertySetterException class to log4j-core.jar. | 
|  | Thanks to ma.darche@free.fr for reporting this bug.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b4" date="2001-04-20"> | 
|  | <action>Mathias Bogaert observed that in version 1.1b3 the search algorithm | 
|  | for the resource used in automatic log4j configuration was | 
|  | different than in 1.0.x. Beta4 uses a more powerful mechanism which | 
|  | is also compatible with 1.0.x.</action> | 
|  |  | 
|  | <action>Paul Glezen correctly observed that if log4j is deployed in a | 
|  | client/server mode where multiple log4j clients log to a log4j | 
|  | server, all hosts must be upgraded to version 1.1 in one go because | 
|  | the internal LoggingEvent class used in client/server communication | 
|  | changed in log4j 1.1.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b3" date="2001-04-18"> | 
|  | <action action="add">Add a RollingFileAppenderBeanInfo class that fakes the | 
|  | maxFileSize JavaBeans property as a String type instead of a long. | 
|  | This allows us to resuscitate setMaxFileSize(long) method that was | 
|  | removed in 1.1b2 breaking 100% backward compatibility. This addition | 
|  | restores 100% backward compatibility.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b2" date="2001-04-18"> | 
|  |  | 
|  | <action>The directory structure has changed to better suit Jakarta | 
|  | conventions</action> | 
|  |  | 
|  | <action action="add">Add a few jar files required at build time to build/lib so that | 
|  | it is now possible to compile log4j out of the box.</action> | 
|  |  | 
|  | <action>Whenever a priority parameter is expected in a configuration file, | 
|  | one can now use a custom priority class. See OptionConverter.toPriority | 
|  | method for more information. Note that the <priority> element in | 
|  | log4j.dtd remains unaffected by this change.</action> | 
|  |  | 
|  | <action action="add">Add the setQuietMode(boolean) method to LogLog. In quiet mode | 
|  | LogLog will not output anything even in case of errors.</action> | 
|  |  | 
|  | <action>Log4j components are now configured as JavaBeans. The setOption and | 
|  | getOptionString methods have been deprecated in OptionHandler | 
|  | interface which is implemented by most log4j components.</action> | 
|  |  | 
|  | <action>The stack trace of a throwable passed in a logging statement is not | 
|  | parsed into a stack array which is serializable. This allows cascading of | 
|  | log4j servers to properly propagate throwable information.</action> | 
|  |  | 
|  | <action>In XML configuration files, the <configuration> element has been | 
|  | deprecated and was replaced by the <log4j:configuration> element.</action> | 
|  |  | 
|  | <action>The "log4j.configDebug" system property has been replaced with the | 
|  | "log4j.debug" system property although it is still available. | 
|  | Similarly, the "configDebug" attribute has been deprecated and | 
|  | replaced with the "debug" attribute in log4j.dtd.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="1.1b1" date="2001-02-23"> | 
|  | <action>Logging can now be disabled per Hierarchy. It can also be disabled | 
|  | using configuration files using the "disable" directive.  The | 
|  | "disableOverride" directive takes precedence over the "disable" | 
|  | directive.  As a result of this change the disable family of | 
|  | methods in BasicConfigurator has been deprecated and replaced by the same | 
|  | family of methods in the Hierarchy class.</action> | 
|  |  | 
|  | <action>The FileAppender has been split into three parts: WriterAppender, | 
|  | ConsoleAppender and FileAppender. ConsoleAppender takes over the | 
|  | console logging functionality of FileAppender. As a result support | 
|  | for stream and console printing has been deprecated in FileAppender.</action> | 
|  |  | 
|  | <action>The FileAppender now correctly outputs the header and footer of its | 
|  | layout. This problem was reported by too many users to list here.</action> | 
|  |  | 
|  | <action>Appenders and Layouts now get to see the raw message object in | 
|  | LoggingEvent not just its rendered form. The access modifiers of | 
|  | some LoggingEvent fields were changed so that they can be accessed | 
|  | in less error-prone ways. Thanks to Jim Cakalic and Anders Kristens | 
|  | for their valuable advice.</action> | 
|  |  | 
|  | <action action="add">Add getLayout(), getErrorHandler(), and getFilter() to the | 
|  | Appender interface.</action> | 
|  |  | 
|  | <action action="add">Add getOption(key) method to the OptionHandler interface and modified | 
|  | implementations of it as appropriate.</action> | 
|  |  | 
|  | <action action="add">Add the much awaited DailyRollingFileAppender.</action> | 
|  |  | 
|  | <action>The structure of the distribution changed somewhat. The log4j.jar | 
|  | files can be found under dist/. The javadoc directory has been | 
|  | moved to docs/api/. We are now totally dependent on ANT to perform | 
|  | all the steps involved in creating a release, including | 
|  | compilation, jar file creation, generation of the javadocs, and for | 
|  | the creation of the distribution tar and zip files.</action> | 
|  |  | 
|  | <action>Removed org/apache/log4j/varia/ResilientFileAppender.java which was | 
|  | bogus to begin with.</action> | 
|  |  | 
|  | <action>XMLLayout will now mark some output as <![CDATA[ .. ]]> so that it | 
|  | does not get interpreted by the XML parser. This was suggested by | 
|  | Mathias Bogaert like a long list of other fixes.</action> | 
|  |  | 
|  | <action>Corrected a bug in CyclicBuffer.resize method that would not update the | 
|  | next insertion point. Thanks to Ole Bulbuk for accurately reporting | 
|  | the bug.</action> | 
|  |  | 
|  | <action>The LoggingEvent class now supports serialization of priorities | 
|  | derived from the org.apache.log4j.Priority class.</action> | 
|  |  | 
|  | <action>Improved the search method for finding the "log4j.properties" file in | 
|  | the static initializer of Category class. Thanks to Calvin Chan for | 
|  | supplying a better method.</action> | 
|  |  | 
|  | <action>The code handling the FCQN (formerly instanceFQN) parameter was | 
|  | cleaned up. There is now a well-established and simple manner for | 
|  | sub-classes of Category (or wrapper classes) to define the FCQN | 
|  | variable: just define a static variable, say FCQN, consisting of | 
|  | the fully qualified class name of the subclass or wrapper, supply | 
|  | this variable as an argument to forcedLog method if and when | 
|  | the sub-class or wrapper invokes that method.</action> | 
|  |  | 
|  | <action>Made the instanceFCQN an instance variable instead of a class | 
|  | static in Category.java. In related move, the Category constructor | 
|  | now takes an additional argument setting the instanceFCQN. This | 
|  | makes life less miserable for Category subclasses.</action> | 
|  |  | 
|  | <action>Corrected a bug in the OptionConverter.instantiateByClassName | 
|  | method that would not return the defaultValue in case of error. Thanks | 
|  | to Matthieu Verbert for identifying this bug.</action> | 
|  |  | 
|  | <action>Corrected the missing stack trace in e-mails generated by the | 
|  | SMTPAppender when using certain Layouts.</action> | 
|  |  | 
|  | <action>Updated the "Adding Conversion Characters to PatternLayout" | 
|  | document to reflect the latest changes to the code. Also added the | 
|  | org/apache/log4j/examples/appserver directory containing the | 
|  | associated example code.</action> | 
|  |  | 
|  | <action action="add">Add the BufferSize option to the AsyncAppender.</action> | 
|  |  | 
|  | <action>Eliminated the SecurityExceptions thrown in Applets.  Thanks Timur | 
|  | Zambalayev for reporting this bug.</action> | 
|  |  | 
|  | <action>Fixed the erroneously thrown IOInterruptedException when the AsyncAppender | 
|  | was closed. Thanks to Tom Palmer for accurately reporting this bug.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="1.0.4" date="2001-01-12"> | 
|  |  | 
|  | <action>Corrected a serious bug in Hierarchy.java that would cause a | 
|  | NullPointerException depending on the order of instantiation of | 
|  | categories. Thanks to Wolfram Gewohn for reporting this bug.</action> | 
|  |  | 
|  | <action>Corrected a bug in the getOptionsStrings method of SMTPAppender | 
|  | that omitted to mention the EvaluatorClass option. Thanks to Mark | 
|  | Balster for reporting this bug.</action> | 
|  |  | 
|  | </release> | 
|  | <release version="1.0.3" date="2001-01-11"> | 
|  |  | 
|  | <action>Fixed a NullPointerException occurring in AsyncAppender after | 
|  | invoking Category.shutdown. Thanks to Frank-Olaf Lohmann for | 
|  | reporting this bug.</action> | 
|  |  | 
|  | <action>Modified the OptionConverter.selectAndConfigure method to take an | 
|  | extra argument of type Hierarchy. This method is used internally | 
|  | and should not affect most users.</action> | 
|  |  | 
|  | <action action="add">Add the warn method to LogLog which is used internally by log4j | 
|  | to report on itself.</action> | 
|  |  | 
|  | <action>Displaced a number of HTML files under the docs directory. The new | 
|  | structure is compatible with the jakarta site and results in a | 
|  | more consistent navigation experience.</action> | 
|  |  | 
|  | <action>Made a few improvements in the javadocs.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="1.0.2" date="2001-01-11"> | 
|  | <action action="add">Add the missing build.inc file to the distribution. No code | 
|  | changed.</action> | 
|  | </release> | 
|  |  | 
|  |  | 
|  | <release version="1.0.1" date="2001-01-10"> | 
|  |  | 
|  | <action>This version corrects some documentation and build script bugs; | 
|  | code has not changed.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="1.0" date="2001-01-08"> | 
|  |  | 
|  | <action>Package hierarchy now starts at org.apache.log4j.</action> | 
|  |  | 
|  | <action action="add">Add the fatal() family of methods to the Category | 
|  | class.  Moreover, the EMERG priority has been removed from the | 
|  | Priority class.  This priority has been replaced by the FATAL | 
|  | priority that is more widely accepted.  This change will | 
|  | require EMERG log statements to be replaced by FATAL log | 
|  | statements.  Assuming EMERG log statements are rare, this should | 
|  | have a small but bearable impact on existing client code. | 
|  |  | 
|  | Moreover, the Unix Syslog priorities ALERT, CRIT and NOTICE are no | 
|  | longer recognized. Support for these priorities was minimal and | 
|  | few users should suffer from these changes.</action> | 
|  |  | 
|  | <action>Removed the methods setRootPriority, getRootPriority as these | 
|  | methods were redundant and had been previously deprecated.</action> | 
|  |  | 
|  | <action>Removed the DOM Level 2 dependency in DOMConfigurator. This makes | 
|  | log4j XML configurable using Sun's parser or Apache's Xerces.</action> | 
|  |  | 
|  | <action>The static initializer of the Category class now takes the | 
|  | log4j.configuration system property to search for its configuration | 
|  | file. The type of the configurator used to parse the configuration | 
|  | file depends on the value of the log4j.configuration system | 
|  | property.</action> | 
|  |  | 
|  | <action>Enhanced the PropertyConfigurator and DOMConfigurator to support | 
|  | customisation of independent Hierarchy instances.  The | 
|  | org.apache.log4j.net.SocketServer has been enhanced to take | 
|  | advantage of this functionality. The old code of SocketServer has | 
|  | been moved to SimpleSocketServer.</action> | 
|  |  | 
|  | <action>Enhanced the PropertyConfigurator to support variable substitution | 
|  | for all options *values* (but not keys!).</action> | 
|  |  | 
|  | <action>Categories are now aware of the Hierarchy they are linked to. This | 
|  | will provide a basis for several performance enhancements planned | 
|  | for the future.</action> | 
|  |  | 
|  | <action action="add">Add support for object rendering. It is now possible to register | 
|  | an object renderer for a given object type. When the given object | 
|  | needs to be logged log4j will invoke the corresponding renderer to | 
|  | transform the object into a String. | 
|  |  | 
|  | As a result of this enhancement, all the String forms of all the | 
|  | printing methods such as debug(String), info(String) have been | 
|  | removed as they are no longer necessary. This change should be | 
|  | backward compatible but requires recompilation of old client | 
|  | code. Thanks to Michael Smith for noting the recompilation | 
|  | requirement.</action> | 
|  |  | 
|  | <action action="add">Add support for user defined category factories in the | 
|  | PropertyConfigurator. Thus, it is now possible to configure log4j | 
|  | with a properties file and still use custom Category | 
|  | sub-classes. The DOMConfigurator had already a finer grain | 
|  | support.</action> | 
|  |  | 
|  | <action action="add">Add the SMTPAppender that in case of an error or fatal event | 
|  | sends an e-mail containing latest N logging events in its buffer, | 
|  | where N is chosen by the user.</action> | 
|  |  | 
|  | <action action="add">Add the method getInstance(Class) to the Category class.</action> | 
|  |  | 
|  | <action>Corrected a bug in configureAndWatch method of configurators that | 
|  | would configure log4j only after an unnecessary delay.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.9.1" date="2000-11-30" description="the 19th public release"> | 
|  |  | 
|  | <action>Corrected a typo making NTEventLogAppender.dll register the wrong | 
|  | category message file. Thanks to Peter Hayes for accurately | 
|  | reporting this bug.</action> | 
|  |  | 
|  | <action>The DOMConfigurator and PropertyConfigurator can now automatically | 
|  | detect modified configuration files and re-read them.</action> | 
|  |  | 
|  | <action action="add">Add AsyncAppender which buffers log requests and serves them | 
|  | at a later time. AsyncAppender can increase logging performance | 
|  | tremendously if logging operations are interspersed with long | 
|  | and blocking non CPU-intensive operations, typically I/O or network | 
|  | access. For CPU intensive applications, using the AsyncAppender | 
|  | will actualy degrade logging performance by 10 to 25 percent.</action> | 
|  |  | 
|  | <action>The log4j.dtd has been modified to allow appenders to refer to | 
|  | other appenders by IDREF.</action> | 
|  |  | 
|  | <action>The DOMConfigurator has been modified to take advantage of ID/IDREF | 
|  | attributes when referring to appenders. This change requires a | 
|  | DOM Level-2 API compliant parser. DOM Level-2 java bindings are | 
|  | available at | 
|  | http://www.w3.org/TR/1999/WD-DOM-Level-2-19990923/java-binding.html.</action> | 
|  |  | 
|  | <action action="add">Add the configure(String filename) method to DOMConfigurator. | 
|  | This method requires the presence of a JAXP compatible parser. | 
|  | At this time, the only DOM2 and JAXP compatible parser seems to be | 
|  | the Apache xerces parser.</action> | 
|  |  | 
|  | <action action="add">Add the PriorityMatchFilter allowing filtering by exact priority | 
|  | match. This was a common request by users.</action> | 
|  |  | 
|  | <action>The configuration of a category is now an atomic operation. This | 
|  | ensures that log requests are not lost while configuration is in | 
|  | progress. Anders Kristensen was to first to observe the potential | 
|  | problems in non-atomic configurations.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.9.0" date="2000-11-20" description="the 18th public release"> | 
|  |  | 
|  | <action>The "log4j" element has been renamed to "configuration" in the | 
|  | log4j DTD. This change requires that log4j configuration files | 
|  | written in XML be modified. Since the log4j element figures only | 
|  | once in the XML file, this change should take little time.</action> | 
|  |  | 
|  | <action>ResourceBundles are now category instance specific and no longer | 
|  | class static.  Moreover, like other properties resource bundles | 
|  | are inherited from the category hierarchy.</action> | 
|  |  | 
|  | <action>The jar files log4j.jar and log4j-full.jar now contain versioning | 
|  | information in their respective manifest files.</action> | 
|  |  | 
|  | <action>Corrected an inconsistency in the NTEventLogAppender which broke it.</action> | 
|  |  | 
|  | <action>Fixed a bug where configuration files were not parsed correctely | 
|  | due to trailing spaces in option values as returned by | 
|  | java.util.Properties. Trailing spaces are now removed from option | 
|  | values. This bug was quite disconcerting because the | 
|  | trailing spaces cannot be seen without careful examination of the | 
|  | configuration file.</action> | 
|  |  | 
|  | <action action="add">Add the XMLLayout. | 
|  |  | 
|  | The output of the XMLLayout consists of a series of log4j:event | 
|  | elements. It does not output a complete XML file. The output is designed to | 
|  | be included as an external entity to form a well-formed XML file.</action> | 
|  |  | 
|  | <action action="add">Add a new abstract class org.log4j.helpers.DateLayout. The TTCCLayout | 
|  | now extends DateLayout.</action> | 
|  |  | 
|  | <action>Corrected a rather subtle performance bug in the buffer management code | 
|  | in PatternLayout. Thanks to Vladislav Dutov and Constantine | 
|  | A. Plotnikov for for insisting on the correction of this bug.</action> | 
|  |  | 
|  | <action>Created a new package called org.log4j.spi. This new package | 
|  | holds classes that are hidden from the casual user but are needed | 
|  | to extend log4j.</action> | 
|  |  | 
|  | <action action="add">Add org.log4j.varia.ExternallyRolledFileAppender to handle | 
|  | externally triggered file rollovers.</action> | 
|  |  | 
|  | <action action="add">Add support for multiple hierarchy trees.</action> | 
|  |  | 
|  | <action>PatternLayout can now be  subclassed to support new conversion | 
|  | patterns.</action> | 
|  |  | 
|  | <action>Extended the DOMConfigurator and the log4j DTD to properly handle | 
|  | sub-classing of Category and Priority classes. | 
|  | There have been also minor adjustments to other classes to handle | 
|  | sub-classing. These changes should be invisible to users. | 
|  |  | 
|  | All categories except the root category can be sub-classed and also | 
|  | assigned priorities sub-classing org.log4j.Priority. | 
|  |  | 
|  | The root category always exists and CANNOT be subclassed. | 
|  |  | 
|  | The ProppertyConfigurator remains unchanged. Thus, it does not | 
|  | handle extensions of the Category class.</action> | 
|  |  | 
|  | <action action="add">Add filter support in appenders. The DOMConfigurator and the | 
|  | log4j.dtd have been enhanced to support filters.</action> | 
|  |  | 
|  | <action action="add">Add error handling support to appenders. The DOMConfigurator and the | 
|  | log4j.dtd have been enhanced to support filters.</action> | 
|  |  | 
|  | <action action="add">Add support for correct interpretation of location information in | 
|  | IBM's Visual Age environment. Thanks to Wolf Siberski for supplying | 
|  | the relevant patch.</action> | 
|  |  | 
|  | <action action="add">Add getAdditivity method to Category. This feature was requested | 
|  | by Constantin Mitran. (mitran at ecircle.de)</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.5b" date="2000-08-27"> | 
|  |  | 
|  | <action>Corrected multiple bugs in default initialization code of | 
|  | Category class. Thanks to Jeff Turner for identifying and supplying | 
|  | corrective patches.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.5a" date="2000-08-24"> | 
|  |  | 
|  | <action action="add">Add the %n conversion character to PatternLayout so that a line | 
|  | separator can be specified in a platform independent way.</action> | 
|  |  | 
|  | <action>In 0.8.5 internal Priority integer values were decoupled from the | 
|  | Unix Syslog values. This broke SyslogAppedder. A new function | 
|  | Priority.toSyslogInt is introduced to solve this bug.</action> | 
|  |  | 
|  | <action>Corrected a bug where the internal priority integer</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.5." date="2000-08-23"> | 
|  |  | 
|  | <action>All log4j internal output is now prepended with the string | 
|  | "log4j: ". This makes is easier to differentiate log4j internal | 
|  | logs from messages output by other sources.</action> | 
|  |  | 
|  | <action>Sub-classes of Category class must now specify their fully | 
|  | qualified name when constructing logging events. This allows the %C | 
|  | conversion specifier in PatternLayout to work properly even with | 
|  | sub-classes or wrappers of Category.</action> | 
|  |  | 
|  | <action action="add">Add the method disableDebug to BasicConfigurator. This method | 
|  | disables all print requests of debug priority regardless its | 
|  | category. Similar methods disableInfo, disable, disableAll and | 
|  | enableAll have also been added. Disable type methods can be | 
|  | overriden by setting the log4j.disableOverride system property. | 
|  |  | 
|  | Calling BasicConfigurator.disableInfo is equivalent to the now | 
|  | deprecated flagAsShippedCode method.</action> | 
|  |  | 
|  | <action>Given the above changes, the system property | 
|  | log4j.shippedCodeFlagOverride is no longer honored.</action> | 
|  |  | 
|  | <action>It is now possible to sub-class Category. The sub-classes may | 
|  | continue to adhere to the category hierarchy. This was a frequently | 
|  | requested feature.</action> | 
|  |  | 
|  | <action>Corrected a problem with the additivity flag being ignored in | 
|  | categories without appenders. This bug was discovered by Anders | 
|  | Kristensen.</action> | 
|  |  | 
|  | <action action="add">Add a method BasicConfigurator.resetConfiguration to reset the | 
|  | log4j environment. This method should be used sparingly.</action> | 
|  |  | 
|  | <action>At the initialization of the Category class, the file | 
|  | log4j.properties will now be searched from the search path used to | 
|  | load classes. If the file can be found, then it is fed to the | 
|  | PropertyConfigurator.configure(java.net.URL) method.</action> | 
|  |  | 
|  | <action>Failing to access system properties within the static initializer | 
|  | of BasicConfigurator class is no longer reported as an error but as | 
|  | a debug message. Thanks to Gilles Schlienger for reporting this | 
|  | problem with applets.</action> | 
|  |  | 
|  | <action>Corrected a bug which caused infinite loops when using conversion | 
|  | patterns with a single element, fortunately under very rare | 
|  | circumstances. This bug was first reported by Igor Potraev, the | 
|  | author of log4p. It was independently reported by Joe Haberl from | 
|  | IBM Global Services.</action> | 
|  |  | 
|  | <action action="add">Add a mechanism to lazily remove references to dead threads in | 
|  | the NDC class. Indeed, in previous versions calling NDC.pop within | 
|  | a thread but forgetting to call to NDC.remove before exiting (that | 
|  | thread) resulted in a memory leak.</action> | 
|  |  | 
|  | <action>Corrected a huge memory leak in SocketAppender. This leak was due | 
|  | to the ObjectOutputStream indefinitely holding a reference for each | 
|  | written to the stream. Thanks to Dan MacDonald for very accurately | 
|  | describing this bug.</action> | 
|  |  | 
|  | <action>The log and l7dlog methods in Category no longer ignore the shipped | 
|  | code flag. This bug was reported by Mario Schomburg.</action> | 
|  |  | 
|  | <action action="add">Add missing NDC information to LoggingEvent.writeObject | 
|  | method.</action> | 
|  |  | 
|  | <action>Corrected handling of SocketException in SocketNode. Thanks to | 
|  | Gerald Gutierez (ggutierez@emobiledata.com) for reporting this and | 
|  | the previous problem.</action> | 
|  |  | 
|  | <action>Phased out custom shell scripts to build java documentation and jar | 
|  | files in favor of Jakarta's ANT. It was becoming a nuisance to keep | 
|  | the ANT build file in sync with the custom shell scripts.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  |  | 
|  | <release version="0.8.4d" date="2000-05-11"> | 
|  |  | 
|  | <action>The NT EventViewer no longer complains about missing message 4096.</action> | 
|  |  | 
|  | <action>Minor corrections in documentation.</action> | 
|  |  | 
|  | <action action="add">Add missing icons GIFs into the distribution.</action> | 
|  |  | 
|  | <action>SocketNode now attempts to close the socket when exiting. Thanks to | 
|  | Moses Hohman (mmhohman@rainbow.uchicago.edu) for noting this.</action> | 
|  |  | 
|  | <action>Removed the com.ibm.log4j from the javadoc directory. This seems to | 
|  | confuse VAJ. Thanks to Steve Ashcroft for reporting this problem.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.4c" date="2000-05-05"> | 
|  |  | 
|  | <action>As a result of the infinite loop problem (see next item), added | 
|  | over 800 new test cases to stress-test the code in CategoryFactory | 
|  | class where category creation occurs.</action> | 
|  |  | 
|  | <action>Under certain rare circumstances the Category.getInstance method | 
|  | entered an infinite loop. Thanks to Mario Schomburg from IBM Global | 
|  | Services / Hannover for identifying this problem and proposing a | 
|  | patch.</action> | 
|  |  | 
|  | <action>DOMConfigurator and the log4j.dtd were out of sync on the type of | 
|  | the priority directive. As a result, priority directives all | 
|  | defaulted to DEBUG. Thanks to Peter (petervt@users.sourceforge.net) | 
|  | for accurately reporting this bug.</action> | 
|  |  | 
|  | <action>Minor additions to the FAQ.</action> | 
|  |  | 
|  | <action action="add">Add the NumberCruncher example showing how the NDC class can be | 
|  | used to distinguish output from different clients.</action> | 
|  |  | 
|  | <action action="add">Add the %x conversion specifier to the TTCC_CONVERSION_PATTERN in | 
|  | the PatternLayout class. This is consistent expected output of | 
|  | Trivial.java example. Thanks to Jerome (schrom@users.sourceforge.net) | 
|  | for reporting this bug.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.4b" date="2000-05-03"> | 
|  |  | 
|  | <action>The value of the additivity option would not be parsed properly by | 
|  | the ProperytConfigurator if the line containing the option | 
|  | contained trailing spaces.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.4a" date="2000-05-03"> | 
|  |  | 
|  | <action>The localized logging methods (l7dlog) omitted priority based | 
|  | evaluation and erroneously logged all requests. </action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.4" date="2000-05-01"> | 
|  |  | 
|  | <action>The close method was added to the Appender interface allowing | 
|  | appender implementations to release any resources they may have | 
|  | allocated.</action> | 
|  |  | 
|  | <action>The package naming scheme of changed from "com.ibm.log4j.*" to | 
|  | "org.log4j.*".  The new naming reflects the open source nature of | 
|  | the project and is consistent with the URL http://www.log4j.org.</action> | 
|  |  | 
|  | <action action="add">Add internationalization support. See the newly introduced l7dlog | 
|  | methods in Category class.</action> | 
|  |  | 
|  | <action>In the FileAppender, the File option now admits variable | 
|  | substitution.  For example, if "java.home" system property is set | 
|  | to /home/xyz and the File option is given the value | 
|  | "%{java.home}/test.log", then File option will be interpreted as | 
|  | "/home/xyz/test.log". | 
|  |  | 
|  | Thanks to Avy Sharell (sharell@online.fr) for contributing this | 
|  | feature.</action> | 
|  |  | 
|  | <action>SocketAppender is now officially part of the package. It is capable | 
|  | of sending logging events to a remote SocketNode. The SocketNode | 
|  | logs events according to server (local) policy. For example, a | 
|  | client can log events to a local file and also send them to a | 
|  | remote server (a SocketNode). This server can log the event to any | 
|  | number of files, to the console, to any number of TextPaneAppenders | 
|  | and even re-transmit the event to another server, and so forth. | 
|  |  | 
|  | This paradigm is common in most logging systems, e.g. Syslog and NT | 
|  | Event Log.  Many thanks to Andrew Harrison for showing a way to | 
|  | actually implement the paradigm.</action> | 
|  |  | 
|  | <action>The Category.callAppenders method now accepts a LoggingEvent | 
|  | instead of creating one itself. This was necessary to accommodate | 
|  | events generated at a remote client.</action> | 
|  |  | 
|  | <action>LoggingEvent class changed slightly to support remote logging. The | 
|  | category field (a Category) has been replaced by the categoryName | 
|  | field (a String).</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.3b" date="2000-04-14"> | 
|  |  | 
|  | <action>Corrected a bug in Category.removeAppender(String) which would | 
|  | never remove the desired appender. Thanks to Moses Hohman for | 
|  | reporting this bug.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.3a" date="2000-04-14"> | 
|  |  | 
|  | <action>Corrected a bug RollingFileAppender which would throw an uncaught | 
|  | exception in case output file could not be opened for | 
|  | writing. Thanks to Vinay Aggarwal for signaling this problem.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.3" date="2000-04-13"> | 
|  |  | 
|  | <action>The log4j.override key defined in BasicConfigurator has been | 
|  | renamed to log4j.shippedCodeFlagOverride.</action> | 
|  |  | 
|  | <action>The getCurrentCategories method in the Category class would not | 
|  | return the correct value. Thanks to Timothy Potter | 
|  | (tpotter@agency.com) for reporting this problem.</action> | 
|  |  | 
|  | <action>Appenders now admit a priority threshold as an option. All requests | 
|  | with a priority lower than the appender's threshold priority are | 
|  | ignored by the appender.</action> | 
|  |  | 
|  | <action>Integrated Christopher Taylor's DOMConfigurator parsing XML | 
|  | configuration files.</action> | 
|  |  | 
|  | <action>The jar file log4j-net.jar has been replaced by log4j-full.jar.  It | 
|  | contains DOMConfigurator.class in addition to the com.ibm.log4j.net | 
|  | package.</action> | 
|  |  | 
|  | <action action="add">Add support for the ANT build tool. Thanks to Christopher Taylor | 
|  | for supplying the build.xml file. ANT is available form | 
|  | http://jakarta.apache.org.</action> | 
|  |  | 
|  | <action>FileAppender's File option now accepts the values "System.out" or | 
|  | "System.err". If one these values is suppiled in a configuration | 
|  | file then the output is directed to the corresponding stream. | 
|  | Moreover, the default constructor of FileAppender no longer sets | 
|  | System.out as an output target nor does it define a default | 
|  | layout.</action> | 
|  |  | 
|  | <action action="add">Add caller class (C), caller file name (F), caller line number | 
|  | (L), caller method name (M) conversion specifiers to the | 
|  | PatternLayout class. | 
|  |  | 
|  | The category conversion specifier now takes an optional precision | 
|  | modifier allowing the user to control the number of right most | 
|  | components in the category name that will be printed. | 
|  |  | 
|  | Corrected a bug occuring when the caller file name and line number | 
|  | information were unavilable due to JIT compilation. In that case, | 
|  | the PatternLayout would not properly use the rest of the available | 
|  | location information. | 
|  |  | 
|  | The above enhancements and bug-fixes originate from comments by | 
|  | Nelson Minar (nelson@monkey.org).</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.2" date="2000-03-23"> | 
|  |  | 
|  | <action>The SimpleLayout and TTCCLayout are replaced by the PatternLayout | 
|  | in the log4j.jar file to keep its size small. These two layouts are | 
|  | still part of the package.</action> | 
|  |  | 
|  | <action>The PatternLayout class is introduced. This new layout is | 
|  | configurable using a conversion pattern which is parsed at | 
|  | runtime. This allows the user to choose the output layout without | 
|  | writing any code and only at a marginal performance cost compared | 
|  | to the dedicated layouts such as SimpleLayout and TTCCLayout. The | 
|  | PatternLayout also allows the user to determine minimum and maximum | 
|  | field lengths. | 
|  |  | 
|  | The PatternLayout was written by Jim Cakalic | 
|  | (jim_cakalic@na.biomerieux.com).</action> | 
|  |  | 
|  | <action>All internal components now use LoggingEvent instances to specifiy | 
|  | logging information.</action> | 
|  |  | 
|  | <action>Corrected a problem with a missing variable initialization in | 
|  | SyslogAppender. This caused NullPinterException to be thrown when | 
|  | logging exceptions. | 
|  |  | 
|  | Added a default constructor to SyslogAppender. The lack of this | 
|  | constructor caused PropertyConfigurator to throw a | 
|  | java.lang.InstantiationException when the appender type was set to | 
|  | be SyslogAppender. | 
|  |  | 
|  | Thanks to Yves Bossel (ybossel@opengets.cl) for accurately | 
|  | identifying these bugs. | 
|  |  | 
|  | Modified some other related option handling code in | 
|  | SyslogAppender.</action> | 
|  |  | 
|  | <action>Made NDC.get public access instead of default access. Thanks to | 
|  | Y. J. Chun (monac@softonnet.com) for reporting this problem.</action> | 
|  |  | 
|  | <action>PropertyConfigurator now parses the additivity option for | 
|  | categories.</action> | 
|  |  | 
|  | <action>Corrected the value of the ADDITIVITY_PREFIX constant to match the | 
|  | documented value, that is "log4j.additivity".</action> | 
|  |  | 
|  | <action>Corrected a really bad bug where System.out would be closed when | 
|  | PropertyConfigurator.configure was called. Thanks to Christopher | 
|  | Taylor (cstaylor@pacbell.net) for tracking and reporting this bug.</action> | 
|  |  | 
|  | <action>The PropertyConfiguator now prints debug messages if the flag | 
|  | "log4j.configDebug" is defined in the configuration | 
|  | file. Previously, only if the system property "log4j.configDebug" | 
|  | was set would debug messages be printed. A question by Shawn | 
|  | Kircher (skircher@vninet.com) induced this change.</action> | 
|  |  | 
|  | <action>In AbsoluteTimeDateFormat, DateTimeDateFormat and ISO8601DateFormat | 
|  | the separator between the seconds and milliseconds has been changed | 
|  | to comma from full stop, in order to be compliant with ISO8601's | 
|  | preferred sign. Thanks to Jim Cakalic | 
|  | (jim_cakalic@na.biomerieux.com) for pointing out this discrepancy | 
|  | with the standard.</action> | 
|  |  | 
|  | <action>Corrected a bug where RollingFileAppender would not work | 
|  | properly on Windows systems. Thanks to Heinz Richter | 
|  | (heinz.richter@ecmwf.int) for noting this problem.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.1" date="2000-02-19"> | 
|  |  | 
|  | <action>Core classes are now independent of the format of the options | 
|  | file. Configurable core classes implement the OptionHandler | 
|  | interface. OptionHandlers allows configurators to learn the | 
|  | relevant option names. The configurator feeds option values to the | 
|  | OptionHandler which configures itself. | 
|  |  | 
|  | As a result of these changes, the Init class has been broken down | 
|  | to two separate classes: the BasicConfigurator and the | 
|  | PropertiesConfigurator. | 
|  |  | 
|  | An XML configurator for 0.8.0 has been already written by | 
|  | Christopher Taylor (cstaylor@pacbell.net).</action> | 
|  |  | 
|  | <action action="add">Add multiple appender support per category. The appenders follow | 
|  | the category hierarchy, i.e. a child category inherits the | 
|  | appenders of its parents.</action> | 
|  |  | 
|  | <action action="add">Add an assert() method to the Category class.  Steven Marcus | 
|  | (srnm@awaretechnologies.com) requested this addition.</action> | 
|  |  | 
|  | <action>Automatic stack printing is no longer supported. This was an unused | 
|  | and unreliable feature which unnecessarily complicated the | 
|  | code.</action> | 
|  |  | 
|  | <action>log4j now emits a single warning message when no appender to write to | 
|  | could be found. This is typically the case when the user forgets | 
|  | to configure the log4j environment.  This change was suggested by | 
|  | Jim Cakalic (jim_cakalic@na.biomerieux.com).</action> | 
|  |  | 
|  | <action>RollingFileAppender adds file roll over capability-implemented by | 
|  | Heinz Richter (heinz.richter@ecmwf.int).</action> | 
|  |  | 
|  | <action>Corrected a bug where a java.lang.NoClassDefFoundError would be | 
|  | thrown because com.ibm.log4j.helpers.SyslogTracerPrintWriter was | 
|  | not included in log4j.jar. Thanks to Jim Cakalic (jim_cakalic@na.biomerieux.com) | 
|  | for signaling this bug.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.8.0" date="2000-02-09"> | 
|  |  | 
|  | <action>There has been an important API changes. The Log, NOPLog and ILog | 
|  | classes have been removed. Their functionality has been migrated to | 
|  | the Category class. | 
|  |  | 
|  | In this release, instead of writing | 
|  |  | 
|  | ILog.debug(CAT, "Some message."); | 
|  |  | 
|  | one will write | 
|  |  | 
|  | CAT.debug("Some message."); | 
|  |  | 
|  | Arndt Schoenewald <arndt@ibm23093i821.mc.schoenewald.de> observed that | 
|  | one could use the Category objects directly for logging.</action> | 
|  |  | 
|  | <action>It is no longer possible to instantiate Category objects directly. | 
|  | Instead, one would use the factory method | 
|  | Category.getInstance(String name). [***] | 
|  |  | 
|  | There category instantiation code was moved to CateogryFactory | 
|  | class.  This class has package visibility and remains hidden from | 
|  | the user. | 
|  |  | 
|  | This stylistic improvement was suggested by Luke Blanshard | 
|  | (luke@quiq.com).</action> | 
|  |  | 
|  | <action>The Init class offers methods to initialize the log4j | 
|  | environment. The Init.flagAsShippedCode method replaces the NOPLog | 
|  | class.</action> | 
|  |  | 
|  | <action>Changes in the documentation to reflect the API changes.</action> | 
|  |  | 
|  | <action>The NDC.cloneStack and inherit methods now tolerate null-stacks.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.5" date="2000-01-29"> | 
|  |  | 
|  | <action>TTCCLayout now takes a java.text.DateFormat object as a | 
|  | parameter. The task of formatting the date is delegated to this | 
|  | object. | 
|  |  | 
|  | Added four classes extending the java.text.DateFormat class. These | 
|  | are RelativeTimeDateFormat, AbsoluteTimeDateFormat, | 
|  | DateTimeDateFormat and ISO8601DateFormat classes. | 
|  |  | 
|  | Thanks to Arndt Schoenewald <arndt@ibm23093i821.mc.schoenewald.de> | 
|  | for suggesting the ISO8601 date format. | 
|  |  | 
|  | These four classes can be parametrized with a particular | 
|  | TimeZone. The TTCCLayout class now accepts a new configuration file | 
|  | option called "TimeZone". | 
|  |  | 
|  | These four DateFormats are less malleable than the | 
|  | java.text.SimpleDateFormat but they are also much faster. | 
|  |  | 
|  | As a consequence of these changes, the setRelativeTime, | 
|  | setDatePrinting methods in TTCCLayout have been removed along with | 
|  | the associated configuration file options RelativeTime, | 
|  | DatePrinting and TimePrinting. | 
|  |  | 
|  | The current code is inspired by code contributed by | 
|  | Heinz Richter (heinz.richter@ecmwf.int).</action> | 
|  |  | 
|  | <action>The Log.emerg method has been deprecated. If you use statements of | 
|  | EMERG priority, please use the Log.log form instead.</action> | 
|  |  | 
|  | <action action="add">Add getDepth and setMaxdepth methods to the NDC class. This makes | 
|  | it easier to manage the nested context depth especially when | 
|  | callees push but forget to pop.</action> | 
|  |  | 
|  | <action>Moved the documentation in com/ibm/log4j/package.html to | 
|  | com/ibm/log4j/overview.html. Many users were failing to read the | 
|  | com/ibm/log4j/package.html description due to the unfortunate | 
|  | layout of the text. Hopefully more people will read the package | 
|  | overview in its present location.</action> | 
|  |  | 
|  | <action action="add">Add the com.ibm.log4j.net package for doing remote logging using | 
|  | TCP sockets. This is still experimental code.</action> | 
|  |  | 
|  | <action action="add">Add new debug, .., emerg methods that do not require a category | 
|  | parameter. They assume the "root" category, that is the decision to | 
|  | whether print or not is made by comparing the statement's priority | 
|  | with the default priority. </action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.4" date="2000-01-21"> | 
|  |  | 
|  | <action action="add">Add a new ILog.init method accepting an Appender and a | 
|  | configuration file as parameters.</action> | 
|  |  | 
|  | <action>FileAppender's setWriter and setFile methods where not instantiating | 
|  | a new tracer.  This caused stack traces to be lost! SyslogAppender | 
|  | had a similar problem.</action> | 
|  |  | 
|  | <action>The FileAppender and SyslogAppender where not calling the layout's | 
|  | readConfig method to set layout specific options. Thanks to Heinz | 
|  | Richter (heinz.richter@ecmwf.int) for reporting this bug.</action> | 
|  |  | 
|  | <action>Corrected a bug in Log.log() method where the appender was always | 
|  | called with Priority.DEBUG.  Thanks to Oliver Boehm | 
|  | (Oliver.Boehm@abaxx.de) for reporting this bug.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.3" date="2000-01-14"> | 
|  |  | 
|  | <action action="add">Add Syslog compatibility. One can now choose (at runtime) between | 
|  | remote syslog logging or file logging. | 
|  | Syslog logging performance, although not appalling, is significantly | 
|  | slower than file logging.</action> | 
|  |  | 
|  | <action>Priority class was enriched with the previously missing priorities | 
|  | NOTICE, ALERT and CRIT. The internal constants were also aligned with | 
|  | the syslog counterparts.</action> | 
|  |  | 
|  | <action action="add">Add the Log.log method to support the new priorities.</action> | 
|  |  | 
|  | <action>TracerPrintWriter is now an independent class instead of being a | 
|  | nested top-level class in Tracer.</action> | 
|  |  | 
|  | <action>A number of writers, namely the SyslogWriter, SyslogQuietWriter, | 
|  | SyslogTracerPrintWriter, were added to the helper package.</action> | 
|  |  | 
|  | <action>Log.force method was removed. The various Appender.doAppend | 
|  | implementations take over its functionality.</action> | 
|  |  | 
|  | <action>FileAppender and SyslogAppender now use QuietWriter. QuietWriter is | 
|  | a FilterWriter which hides exceptions and instead emits a single | 
|  | warning message to System.err.</action> | 
|  |  | 
|  | <action>The layout is now an initialization parameter to the appender | 
|  | type. Previously, the layout and the appender where independent | 
|  | parameters to the Log constructor.</action> | 
|  |  | 
|  | <action>Many small improvements and corrections in the documentation. | 
|  | Syslog related documentation remains sparse.</action> | 
|  |  | 
|  | <action>ILog.init() and ILog.init(String configFile) have been changed to | 
|  | call ILog.init(,,,) with "com.ibm.log4j.Log.class" as the first | 
|  | parameter. This makes it easier for people to get familiar with log4j.</action> | 
|  |  | 
|  | <action action="add">Add missing files to the make directory. These files are useful | 
|  | for those wishing to use the log4j make environment. Thanks to "Lee | 
|  | Hall" <LHall@JavaFoundry.com> for reporting this omission. | 
|  | Until recently the make environment failed to compile RMI stubs in | 
|  | a single run. This nagging problem has been corrected thanks to | 
|  | help from Thomas Eirich (IBM Zurich Research Lab).</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.2" date="2000-01-04"> | 
|  |  | 
|  | <action>Some users have been rightly complaining about the verbosity | 
|  | TTCCLayout's date output. The full date output is now shortened to | 
|  | "dd MMM YYYY HH:mm:ss.SSS" for example, "06 Nov 1994 08:49:37.459" | 
|  | In addition, users may now choose to print only time information, | 
|  | as in "08:49:37.459".</action> | 
|  |  | 
|  | <action>The package now uses Writer instead of OutputStream as its output | 
|  | target. This makes the log4j code smaller and easier to | 
|  | understand at the cost of a slight performance degradation. As a | 
|  | result of this change a few method names in FileAppender class were | 
|  | changed.</action> | 
|  |  | 
|  | <action>Preliminary experiments with SyslogAppedner and SyslogLayout show | 
|  | that syslog compatibility is not far away. The difficultly is | 
|  | adding syslog compatibility without making radical changes to the | 
|  | current log4j architecture.</action> | 
|  |  | 
|  | <action>Corrected a bug in the NOPLog.createInstance method which always | 
|  | created a Log singleton even if the system property "log4j.logType" | 
|  | was set to NOPLog.  Thanks to Robert Gottofrey | 
|  | (Robert.Gottofrey@wdr.com) for reporting this bug and the | 
|  | associated test case.</action> | 
|  |  | 
|  | <action>Removed the inconsistent "Layout" configuration option in | 
|  | Log.readConfig().  This change should be transparent to most | 
|  | users.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.1" date="1999-12-20"> | 
|  |  | 
|  | <action>The LogCreationManager class has been removed. Its functionality | 
|  | has been transfered to the createInstance and getInstance methods | 
|  | in the Log and NOPLog classes. The new way of creating instances is | 
|  | both simpler and less error prone although just as flexible. | 
|  |  | 
|  | As a result of these changes, the init family of methods in the | 
|  | ILog class have been adjusted to the new way of creating the log | 
|  | singleton.</action> | 
|  |  | 
|  | <action>The Appender interface has been introduced. The method of writing a | 
|  | log statement into an output stream can now be varied by using a | 
|  | different Appender. The new FileAppender offers the same | 
|  | functionality that was previously part of the Log class.</action> | 
|  |  | 
|  | <action>Changed the time format used in TTCCLayout to be of the form "Day, | 
|  | dd MMM YYYY HH:mm:ss.SSS GMT" for example, "Sun, 06 Nov 1994 | 
|  | 22:49:37.459 GMT". This format is almost the same as the format | 
|  | specified in RFC 1123 and also the format recommended in RFC | 
|  | 2616. The only difference is the additional milliseconds | 
|  | information.</action> | 
|  |  | 
|  | <action>The layout specific options were not read from the configuration | 
|  | file due to a missing instruction. Many thanks to Vikram Sridharan | 
|  | (Vikram.Sridharan@alysis.com) to patiently pointing out this | 
|  | omission to an unbelieving maintainer.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.7.0" date="1999-12-16"> | 
|  |  | 
|  | <action>Version 0.7.0 and above will be distributed under the IBM Public | 
|  | License (IPL). The IPL is an approved open source license (see | 
|  | http://www.opensource.org/licenses/ for a list). It grants similar | 
|  | rights to the previous ALPHAWORKS license agreement, in particular, | 
|  | the right to redistribute and to modify the package.</action> | 
|  |  | 
|  | <action>The Log class can now be parameterized with a Layout object. | 
|  | Layouts determine the format of what is printed, where as the Log | 
|  | class decides when to print and to where. | 
|  |  | 
|  | As a result of this modularization, the CGULog and NOPCGULog | 
|  | classes no longer exists. CGULog class has been replaced with the | 
|  | TTCCLayout (Time Thread Context Category). This should make it | 
|  | easier to create new log output formats. | 
|  |  | 
|  | Some time in the near future, the Log class will be further broken | 
|  | down to allow different strategies for writing to output streams.</action> | 
|  |  | 
|  | <action>Renamed com.ibm.util.log hierarchy to to com.ibm.log4j. I wanted to | 
|  | do this for some time. I feel release 0.7.0 was the last | 
|  | opportunity to do so. I am sorry for the the trouble caused by this | 
|  | change.</action> | 
|  |  | 
|  | <action>New NDC class. This class implements nested diagnostic contexts as | 
|  | suggested by Neil Harrison in the article "Patterns for Logging | 
|  | Diagnostic Messages" part of the book "Pattern Languages of Program | 
|  | Design 3" edited by Martin et al. Nested diagnostic contexts is a | 
|  | nifty feature that was missing up to now. | 
|  |  | 
|  | The StressNDC test class seems to break JDK 1.2.2 beta on AIX. On | 
|  | Linux and NT using sun's JDK 1.2.2 it seem to work OK. In any case, | 
|  | tests done with StressNDC and associated perl script seem to | 
|  | indicate that the NDC class is bug-free.</action> | 
|  |  | 
|  | <action>Corrected a date formatting bug in CGULog class where on some | 
|  | environments the wrong month was printed. Thanks to Christopher | 
|  | Williams (Christopher_Williams@mail.northgrum.com) for signaling | 
|  | this bug.  Also changed the month format from a number to a three | 
|  | letter abbreviation such as "Jan", "Feb", ..., "Dec". The new | 
|  | format is unambiguous regardless of local date format.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.6.2" date="1999-12-08"> | 
|  |  | 
|  | <action>Clearer documentation with still much room for improvement.</action> | 
|  |  | 
|  | <action>Corrected a bug in the Tracer class which always used the Unix line | 
|  | separator instead of the system specific separator. Thanks to | 
|  | Vikram Sridharan (Vikram.Sridharan@alysis.com) for singaling this | 
|  | bug.</action> | 
|  |  | 
|  | <action>Corrected a runaway comment which gulped the CGULog.readConfig | 
|  | method.</action> | 
|  |  | 
|  | <action action="add">Add the init family of methods to the ILog class to ease the | 
|  | setup of a basic logging environment. Thanks to Mark Donszelmann | 
|  | (Mark.Donszelmann@cern.ch) for this enhancement.</action> | 
|  |  | 
|  | <action>Just an hour after releasing version 0.6.1 detected and corrected a | 
|  | bug where the Tracer class would correctly print Exception stack | 
|  | trace but not the type of the Exception.  Replaced the | 
|  | distribution on www.zurich.ibm.com without changing the version | 
|  | number. I hope nobody is using the intermediary (and buggy) release | 
|  | of 0.6.1.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.6.1" date="1999-11-16"> | 
|  | <action>Better documentation with still much room for improvement.</action> | 
|  |  | 
|  | <action>For consistence sake, added setDefaultPriority and | 
|  | getDefaultPriority methods to the Category class and deprecated | 
|  | setDefaultPriority in the Log.class.</action> | 
|  |  | 
|  | <action>Corrected a major bug where if two categories were homonyms the | 
|  | second instance would not be properly initialized.</action> | 
|  |  | 
|  | <action>Increased the speed of Exception logging from about 4000 | 
|  | microseconds to about 1000. It seems that for some people Exception | 
|  | logging is performance critical. Improved implementation is a | 
|  | variant of Nocolai's (XNH@crisplant.com) implementation.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.6.0" date="1999-11-09"> | 
|  |  | 
|  | <action>Release of log4j 0.6.0 with incomplete documentation.</action> | 
|  |  | 
|  | <action action="add">Add a stress test program to debug the new Category class. It | 
|  | turns out that the test program was as hard to get right as the | 
|  | Category class. Given the favorable results of the stress test I am | 
|  | quite confident that the new class is now bug free. This assumption | 
|  | has been proven to be wrong. See above.</action> | 
|  |  | 
|  | <action>Created a new class called Category to manipulate categories | 
|  | instead of plain Strings. The new class is just as easy to use. | 
|  | However, the evaluation of whether to log or not to log is at least | 
|  | 10 times faster. The NOP class performance remain unaffected by the | 
|  | change. (You can't improve on the performance of an empty function | 
|  | call.) | 
|  |  | 
|  | Many thanks to Alex Blewitt "Alex.Blewitt@ioshq.com" for his | 
|  | valuable comments. He was the first to observe that finding Strings | 
|  | in a hash table was an expensive operation. | 
|  |  | 
|  | This change will require some recoding on your part. See the FAQ | 
|  | for more details.</action> | 
|  |  | 
|  | <action>Modified the force in Log and CGULog method to use a byte[] buffer | 
|  | instead of a StringBuffer. The old code was clearer but the new one | 
|  | is at least 25% faster.</action> | 
|  |  | 
|  | <action action="add">Add regression testing.</action> | 
|  |  | 
|  | <action>We now enforce a policy where the OutputStream set by | 
|  | setOutputStream is a user managed resource whereas the OutputStream | 
|  | opened using setLogFile is the Log class' responsibility. | 
|  |  | 
|  | The setLogFile method now closes any previous OutputStream if only | 
|  | if opened through setLogFile. If the previous OutputStream was | 
|  | opened by the user and set through setOutputStream the previous | 
|  | OutputStream is untouched. | 
|  |  | 
|  | Similarly, setOutputStream will close any previous OutputStream if | 
|  | and only if it was opened using setLogFile. | 
|  | </action> | 
|  |  | 
|  | <action action="add">Add a new method logOutputStreamExists to the Log class allowing | 
|  | the programmer to check if there is already an opened stream before | 
|  | trying to set a new one.  A stream can be opened as a byproduct of | 
|  | reading the configuration file.</action> | 
|  |  | 
|  | <action>Changed the behavior of the (private) Log.Append method in case of | 
|  | failure to write to the OutputStream. | 
|  |  | 
|  | Previously, in case of failure, we reverted to System.err.  Now, we | 
|  | emit a warning message and discard all future log messages.  The | 
|  | new behavior is consistent with our current unreliable logging | 
|  | semantics.  The change prevents an otherwise functional program | 
|  | from failing because the terminal is flooded with logging messages.</action> | 
|  |  | 
|  | <action>Renamed the iLog to ILog to remain consistent with our class naming | 
|  | scheme. The initial intention was to add ILog and deprecate | 
|  | iLog. However, I am running CVS on a fat16 partition, causing | 
|  | serious problems when files differ only in case.</action> | 
|  |  | 
|  | <action>Corrected a bug where the LogFileName was not remembered. Thanks to | 
|  | Jens for signaling this bug.</action> | 
|  | </release> | 
|  |  | 
|  | <release version="0.5a" date="1999-10-28"> | 
|  | <action>Now the programmer can choose to truncate the log file instead of | 
|  | always appending to it.  This functionality was first requested and | 
|  | intially implemented by "Jens Uwe Pipka" jens.pipka@gmx.de.</action> | 
|  |  | 
|  | <action>setLogFile now opens the requested file instead of having the | 
|  | Append function open it later. Cleaned up some related code in the | 
|  | Append function.  Although nobody has requested it, there is still | 
|  | no method to close the log file. This is harder to implement | 
|  | reliably than it sounds.</action> | 
|  |  | 
|  | <action>Simplified setLogOutputStream so that it does no longer return the | 
|  | previously set OutputStream.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="0.5" date="1999-10-27"> | 
|  |  | 
|  | <action>Joe Walker (joe@eireneh.com) observed that the | 
|  | LogCreationManager.getSingleton mechanism was cumbersome.  There is | 
|  | now a new class iLog (indirect Log) which hides the need to call | 
|  | getSingleton. Performance testing on my 233Mhz Thinkpad shows that | 
|  | this indirection has small performance impact on non-logged calls | 
|  | in the order of 40 nanoseconds. The impact on logged calls is | 
|  | negligible.</action> | 
|  |  | 
|  | <action action="add">Add a jar file to the distribution. The jar file contains only | 
|  | the files you would need to use log but not other classes needed | 
|  | for testing nor examples.</action> | 
|  |  | 
|  | <action>Corrected a bug where CGUNOPLog was not integrated to the Makefile.</action> | 
|  |  | 
|  | <action action="add">Add new public methods isDebugEnabled and isInfoEnabled to allow | 
|  | programmers to check whether a debug/info statement will be logged | 
|  | without incurring the cost of message parameter construction. This | 
|  | addition was suggested by Luke Blanshard Luke@quiq.com.</action> | 
|  |  | 
|  | <action>Renamed the private method evaluate to isEnabled. Also made it | 
|  | final with no apparent speed gains.  In addition, made the | 
|  | Log.force method public.</action> | 
|  |  | 
|  | <action>New syntactic sugar debug, ..., emerg, methods to log objects.</action> | 
|  |  | 
|  | <action>Modified the interface to deal with Throwables and not just | 
|  | Exceptions.  My thanks to Luke Blanshard for signaling this "bug".</action> | 
|  |  | 
|  | <action action="add">Add more tests to the LogPerformance class. In particular, to | 
|  | test the influence of indirect debug calls.</action> | 
|  |  | 
|  | <action action="add">Add a "make" mini-tutorial for those who want to modify the code.</action> | 
|  |  | 
|  | <action>License updated to standard alphaWorks license allowing | 
|  | modifications to source code. However, this license explicitly | 
|  | requires that modifications be communicated back to alphaWorks.</action> | 
|  |  | 
|  | </release> | 
|  |  | 
|  | <release version="initial" date="1999-10-15"> | 
|  | <action>Initial availability on alphaWorks.  Refer to the FAQ for the lineage of the package.</action> | 
|  | </release> | 
|  | </body> | 
|  | </document> |