The version of Apache log4j used by SoundHelix.

[[ 🗃 ^aEp6o apache-log4j ]] :: [📥 Inbox] [📤 Outbox] [🐤 Followers] [🤝 Collaborators] [🛠 Commits]

Clone

HTTPS: git clone https://vervis.peers.community/repos/aEp6o

SSH: git clone USERNAME@vervis.peers.community:aEp6o

Branches

Tags

v_1_0 ::

HISTORY

 
	
   [*] Changes that are 100% compatible with existing client code.  
  [**] Changes that requiring little or no modification to existing
       client code. 
 [***] Changes requiring important modifications to existing client code.

 December ??, 2000

 - Release of version 1.0 (the 20th public release)
 
 - Added the fatal() family of methods to the Category
   class.  Moreoever, 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 mininal and
   few users should suffer from these changes. [**]

 - Removed the methods setRootPriority, getRootPriority as these
   methods were redundant and had been previously deprecated. [**]

 - Removed the DOM Level 2 dependency in DOMConfigurator. This makes
   log4j XML configurable using Sun's parser or Apache's Xerces. [*]

 - Enhanced the PropertyConfigurator and DOMConfigurator to support
   customization of independent Hierarchies. 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. [**]

 - Enhanced the PropertyConfigurator to support variable substitution
   for all options *values* (but not keys!). [*]

 - Categories are now aware of the Hierarchy they are linked to. This
   will provide a basis for several performance enhancements planned
   for the future. [*]

 - Added 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
   perfectly backward compatible. [*]

 - Added support for user defined category factories in the
   PropertyConfigurator. Thus, it is now possible to configure log4j
   with a properties file and still use custem Category
   sub-classes. The DOMConfigurator had already a finer grain
   support. [*]

 - Addeed 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. [*]

 - Added the method getInstance(Class) to the Category class. [*]

 - Corrected a bug in configureAndWatch method of configurators that
   would confgure log4j only after an unnecessary delay. [*]

 November 30, 2000
 
 - Release of version 0.9.1 (the 19th public release)
 
 - Corrected a typo making NTEventLogAppender.dll register the wrong
   category message file. Thanks to Peter Hayes for accurately
   reporting this bug. [*]

 - The DOMConfigurator and PropertyConfigurator can now automatically
   detect modified configuration files and re-read them. [*]
 
 - Added 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. [*]

 - The log4j.dtd has been modified to allow appenders to refer to
   other appenders by IDREF. [*]
  
 - 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.

 - Added 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.
	
 - Added the PriorityMatchFilter allowing filtering by exact priority
   match. This was a common request by users. [*]

 - 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. [*]

 November 20th, 2000
 
 - Release of version 0.9.0 (the 18th public release)

 - 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. [**]

 - ResourceBundles are now category instance specific and no longer
   class static.  Moreover, like other properties resource bundles
   are inherited from the category hierarchy. [**]

 - The jar files log4j.jar and log4j-full.jar now contain versioning
   information in their respective manifest files. [*]

 - Corrected an inconsistecy in the NTEventLogAppender which broke it.

 - 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. [*]

 - Added 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. [*]

 - Added a new abstract class org.log4j.helpers.DateLayout. The TTCCLayout
   now extends DateLayout. [*]

 - 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. [*]

 - 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. [*]
   
 - Added org.log4j.varia.ExternallyRolledFileAppender to handle
   externally triggered file rollovers. [*]

 - Added support for multiple hierarchy trees. [*]

 - PatternLayout can now be  subclassed to support new conversion
   patterns. [*]

 - 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. [*]

 - Added filter support in appenders. The DOMConfigurator and the
   log4j.dtd have been enhanced to support filters. [*]

 - Added error handling support to appenders. The DOMConfigurator and the
   log4j.dtd have been enhanced to support filters. [*]

 - Added support for correct interpretation of location information in
   IBM's Visual Age environment. Thanks to Wolf Siberski for supplying
   the relevant patch. [*]

 - Added getAdditivity method to Category. This feature was requested
   by Constantin Mitran. (mitran at ecircle.de) [*]

 August 27, 2000
 
 - Release of version 0.8.5b.

 - Corrected multiple bugs in default initialization code of
   Category class. Thanks to Jeff Turner for identifying and supplying
   corrective patches. [*]

 August 24, 2000
 
 - Release of version 0.8.5a.

 - Added the %n conversion character to PatternLayout so that a line
   separator can be specified in a platform independent way. [*]
 
 - 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. [*]

Corrected a bug where the internal prtar tzvf iority integer

 August 23, 2000
 
 - Release of version 0.8.5.

 - 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. [*]

 - 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. [*]
  
 - Added 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. [*]

 - Given the above changes, the system property
   log4j.shippedCodeFlagOverride is no longer honored. [**]

 - 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. [*]

 - Corrected a problem with the additivity flag being ignored in
   categories without appenders. This bug was discovered by Anders
   Kristensen. [*]

 - Added a method BasicConfigurator.resetConfiguration to reset the
   log4j environment. This method should be used sparingly. [*]

 - 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. [*]

 - 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. [*]

 - 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. [*]
 
 - Added 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. [*]

 - 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. [*]

 - The log and l7dlog methods in Category no longer ignore the shipped
   code flag. This bug was reported by Mario Schomburg. [*]

 - Added missing NDC information to LoggingEvent.writeObject
   method. [*]

 - Corrected handling of SocketException in SocketNode. Thanks to
   Gerald Gutierez (ggutierez@emobiledata.com) for reporting this and
   the previous problem. [*]

 - 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. [*]
  

 May 11, 2000

 - Release of version 0.8.4d.
 
 - The NT EventViewer no longer complains about missing message 4096.

 - Minor corrections in documentation.

 - Added missing icons GIFs into the distribution.

 - SocketNode now attempts to close the socket when exiting. Thanks to
   Moses Hohman (mmhohman@rainbow.uchicago.edu) for noting this.
 
 - Removed the com.ibm.log4j from the javadoc directory. This seems to
   confuse VAJ. Thanks to Steve Ashcroft for reporting this problem.
     
 May 5, 2000

 - Release of version 0.8.4c.

 - 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. [*]
 
 - 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. [*]

 - 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. [*]
 
 - Minor additions to the FAQ. [*]

 - Added the NumberCruncher example showing how the NDC class can be
   used to distinguish output from different clients. [*]
 
 - Added 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. [*]
 
 May 3, 2000
 
 - Release of version 0.8.4b.

 - The value of the additivity option would not be parsed properly by
   the ProperytConfigurator if the line containing the option
   contained trailing spaces. [*]
    
 - Release of version 0.8.4a.

 - The localized logging methods (l7dlog) omitted priority based
   evaluation and erroneously logged all requests.  [*]
 
 May 1, 2000

 - Release of version 0.8.4.

 - The close method was added to the Appender interface allowing
   appender implementations to release any resources they may have
   allocated. [*]
 
 - 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. [***]
 
 - Added internationalization support. See the newly introduced l7dlog
   methods in Category class. [*]

 - 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. [*]
   
 - 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. [*]
 
 - The Category.callAppenders method now accepts a LoggingEvent
   instead of creating one itself. This was necessary to accommodate
   events generated at a remote client. [*]
 
 - LoggingEvent class changed slightly to support remote logging. The
   category field (a Category) has been replaced by the categoryName
   field (a String). [*]

 April 14, 2000

 Release of version 0.8.3b

 - Corrected a bug in Category.removeAppender(String) which would
   never remove the desired appender. Thanks to Moses Hohman for
   reporting this bug.
 
 Release of version 0.8.3a

 - 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.
  
 April 13, 2000

 - Release of version 0.8.3.
 
 - The log4j.override key defined in BasicConfigurator has been
   renamed to log4j.shippedCodeFlagOverride. [**]
	
 - The getCurrentCategories method in the Category class would not
   return the correct value. Thanks to Timothy Potter
   (tpotter@agency.com) for reporting this problem. [*]
 
 - 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. [*]
 
 - Integrated Christopher Taylor's DOMConfigurator parsing XML
   configuration files. [*]
 
 - 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. [**]
 
 - Added support for the ANT build tool. Thanks to Christopher Taylor
   for supplying the build.xml file. ANT is available form
   http://jakarta.apache.org. [*]
 
 - 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. [*]
      
 - Added 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).
 
 March 23, 2000

 - Release of version 0.8.2.
  
 - 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.
  
 - 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). [*]

 - All internal components now use LoggingEvent instances to specifiy
   logging information.
   
 - 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. [*]
      
 - Made NDC.get public access instead of default access. Thanks to
   Y. J. Chun (monac@softonnet.com) for reporting this problem. [*]
    
 - PropertyConfigurator now parses the additivity option for
   categories. [*]
 
 - Corrected the value of the ADDITIVITY_PREFIX constant to match the
   documented value, that is "log4j.additivity". [**]
 
 - 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. [*]

 - 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. [*]

 - 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. [*]

 - Corrected a bug where RollingFileAppender would not work
   properly on Windows systems. Thanks to Heinz Richter
   (heinz.richter@ecmwf.int) for noting this problem.
       
 February 19, 2000

 - Release of version 0.8.1.
 
 - 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).

 - Added multiple appender support per category. The appenders follow
   the category hierarchy, i.e. a child category inherits the
   appenders of its parents. 
   
 - Added an assert() method to the Category class.  Steven Marcus
   (srnm@awaretechnologies.com) requested this addition. [*]
 
 - Atomatic stack printing is no longer supported. This was an unused
   and unreliable feature which unnecessarily complicated the
   code. [*]

 - 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). [*]

 - RollingFileAppender adds file roll over capability--implemented by
   Heinz Richter (heinz.richter@ecmwf.int). [*]
   
 - 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. [*]
 
 February 9, 2000

 - Release of version 0.8.0.

 - 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. 
   
 - 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).

 - The Init class offers methods to initialize the log4j
   environment. The Init.flagAsShippedCode method replaces the NOPLog
   class.
   
 - Changes in the documentation to reflect the API changes. 

 - The NDC.cloneStack and inherit methods now tolerate null-stacks. [*]

    
 January 29, 2000

 - Release of version 0.7.5.
 
 - 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).
   
 - The Log.emerg method has been deprecated. If you use statements of
   EMERG priority, please use the Log.log form instead. [**]
 
 - Added 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.
 
 - 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.

 - Added the com.ibm.log4j.net package for doing remote logging using
   TCP sockets. This is still experimental code.
 
 - Added 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.  [*]
    
January 21, 2000

 - Release of version 0.7.4.
 
 - Added a new ILog.init method accepting an Appender and a
   configuration file as parameters. 
 
 - FileAppender's setWriter and setFile methods where not instantiating
   a new tracer.  This caused stack traces to be lost! SyslogAppender
   had a similar problem. [*]

 - 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. [*]
 
 - 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. [*]
    
January 14, 2000

 - Release of version 0.7.3.

 - Added 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.

 - Priority class was enriched with the previously missing priorities
   NOTICE, ALERT and CRIT. The internal constants were also aligned with
   the syslog counterparts. [*]

 - Added the Log.log method to support the new priorities. [*]   
   
 - TracerPrintWriter is now an independent class instead of being a
   nested top-level class in Tracer. [*]

 - A number of writers, namely the SyslogWriter, SyslogQuietWriter,
   SyslogTracerPrintWriter, were added to the helper package. [*]

 - Log.force method was removed. The various Appender.doAppend
   implementations take over its functionality. [*]

 - FileAppender and SyslogAppender now use QuietWriter. QuietWriter is
   a FilterWriter which hides exceptions and instead emits a single
   warning message to System.err. [*]
     
 - The layout is now an initialization parameter to the appender
   type. Previously, the layout and the appender where independent
   parameters to the Log constructor. [**]
       
 - Many small improvements and corrections in the documentation.
   Syslog related documentation remains sparse.
	
 - 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. [**]
	
 - Added 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).
	
January 4, 2000

 - Release of version 0.7.2.
 
 - 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". [*]
	
 - 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. [**]

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

 - 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.
	
 - Removed the inconsistent "Layout" configuration option in
   Log.readConfig().  This change should be transparent to most
   users. [*/**]
	
December 20, 1999

 - Release of version 0.7.1.
 
 - 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.
   
 - 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. [**]

 - 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. [*]
	
 - 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. [*]

December 16, 1999

 - Release of version 0.7.0.

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

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

 - 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. [**/***]

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

 - 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. [*]

December 8, 1999

 - Release of version 0.6.2.
 	
 - Clearer documentation with still much room for improvement.
 
 - 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. [*]

 - Corrected a runaway comment which gulped the CGULog.readConfig
   method. [*]

 - Added 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. [*]
  
 - 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. [*]

November 16, 1999
	
 - Release of log4j version 0.6.1.

 - Better documentation with still much room for improvement.
	 
 - For consistence sake, added setDefaultPriority and
   getDefaultPriority methods to the Category class and deprecated
   setDefaultPriority in the Log.class. [**]

 - Corrected a major bug where if two categories were homonyms the
   second instance would not be properly initialized.

 - 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. [*]

November 9, 1999

 - Release of log4j 0.6.0 with incomplete documentation.

 - Added 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.
	
 - 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. [***]

 - 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. [*]

 - Added regression testing.
   
 - 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.

 - Added 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.
	
 - 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.

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

 - Corrected a bug where the LogFileName was not remembered. Thanks to
   Jens for signaling this bug.

October 28, 1999	

 - Release of log4j v0.5a

 - 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. [*]

 - 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. [*] 

 - Simplified setLogOutputStream so that it does no longer return the
   previously set OutputStream. [*]
	
October 27, 1999	

 - Released log4j v0.5

 - 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. [*]
	
 - Added 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.
	
 - Corrected a bug where CGUNOPLog was not integrated to the Makefile.
	
 - Added 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. [*]

 - Renamed the private method evaluate to isEnabled. Also made it
   final with no apparent speed gains.  In addition, made the
   Log.force method public. [*]
	
 - New syntactic sugar debug, ..., emerg, methods to log objects. [*]

 - Modified the interface to deal with Throwables and not just
   Exceptions.  My thanks to Luke Blanshard for signaling this "bug". [*]
		
 - Added more tests to the LogPerformance class. In particular, to
   test the influence of indirect debug calls.

 - Added a "make" mini-tutorial for those who want to modify the code.
	
 - License updated to standard alphaWorks license allowing
   modifications to source code. However, this license explicitly
   requires that modifications be communicated back to alphaWorks.

October 15, 1999

 - Initial availability on alphaWorks.
		
Refer to the FAQ for the lineage of the package.



[See repo JSON]