--------------------------------------------------------------------------
Document: Syslog4j CHANGELOG.txt
Version:  $Id: CHANGELOG.txt,v 1.49 2010/03/19 13:21:35 cvs Exp $
URL:      http://www.syslog4j.org/
--------------------------------------------------------------------------
Version 0.9.34 (03/19/2010)
+ BUG FIX: Modified TCPNetSyslogWriter's shutdown() method to properly
  check for null or closed sockets (Thanks, Raskin!)
--------------------------------------------------------------------------
Version 0.9.33 (02/27/2010)
+ BUG FIX: Modified UnixSocketSyslog to create the socket upon first
  write; prior to this version, the stock "unix_socket" protocol's
  configuration could not be modified
+ Successfully tested Syslog4j's unix_socket and unix_syslog protocols
  on MacOSX version 10.6.2
+ JUnit test improvements; 78.4% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.32 (02/10/2010)
+ BUG FIX: AbstractSyslog.write(SyslogMessageProcessorIF,int,String)
  modified to properly handle Unicode messages (thanks, Brett!)
+ SyslogIF modified with getter/setter for
  StructuredSyslogMessageProcessor
+ Improvements to AbstractSyslog.log(..) methods to more properly
  handle StructuredSyslogMessageProcessor configurations
+ JUnit test improvements; 78.3% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.31 (02/03/2010)
+ BUG FIX: ChecksumSyslogMessageModifier was computing a "continuous"
  checksum, meaning that the checksum was being generated based on
  the current and all previous messages going through this message
  modifier instead of being computed solely on the current message.
  In case there are some users expecting or desiring this behavior,
  ChecksumSyslogMessageModifierConfig now has a setContinuous(boolean)
  method which is defaulted to a false value (the way it was intended
  to work).  Those users must set this to a true value.
+ Added RFC3339TimestampUtility to robustly handle RFC3339-formatted
  dates (Thanks, Chad!)
+ Improved date handling in StructuredSyslogServerEvent by using
  RFC3339TimestampUtility
+ Switched default instances in SyslogMessageProcessor and
  StructuredSyslogMessageProcessor from interfaces to classes
+ JUnit test improvements; 77.8% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.30 (07/25/2009)
+ Support added for "structured syslog" as defined here:
  http://tools.ietf.org/html/draft-ietf-syslog-protocol-23
  Code submitted by Manish Motwani (thanks, Manish!)
+ Renamed SyslogIF.fatal(..) methods to SyslogIF.emergency(..) to
  be consistent with RFC 3164
+ Fixed copy/paste errors with SyslogIF.notice(..), SyslogIF.critical(..),
  and SyslogIF.alert(..) levels
+ Fixed Log4jSyslogBackLogHandler.getLog4jLevel(..) to more
  accurately convert syslog levels to Log4J levels
+ Set sendLocalName to false by default for UnixSocketSyslog
+ Improved UnixSyslog by using synchronization to support multiple
  facilities by calling the static openlog(..) and closelog() methods as
  necessary when the facility is "switched" between instances
  (thanks, Ken!)
+ Added Syslog4jBackLogHandler which allows another Syslog4j protocol
  to be used for back logging
+ JUnit test improvements; 77.5% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.29 (06/06/2009)
+ Added support for message truncation (instead of splitting messages
  into more than one event) via SyslogConfigIF.setTruncateMessage(true)
+ Added more configuration options to Syslog4jAppenderSkeleton
+ Moved maxMessageLength to SyslogConfigIF
+ Set sendLocalName to false by default for UnixSyslog (credit: Nathan)
+ Removed unnecessary check for sub-zero length String in AbstractSyslog
  (credit: Darien)
+ JUnit test improvements; 76.8% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.28 (06/03/2009)
+ Override added for UnixSyslog.prefixMessage(..) to remove support
  for adding the "ident" value, which is redundant since Unix-based syslog
  configures the ident within the openlog(..) method (thanks to Nathan)
+ Switched empty String in ident to a null before passing into openlog;
  this substitutes the name of the running program for the ident field
--------------------------------------------------------------------------
Version 0.9.27 (04/16/2009)
+ Added main() methods to Syslog and SyslogServer for a rudimentary
  command-line client/server implementations; coded in separate
  SyslogMain and SyslogServerMain classes
+ Added notice(..), critical(..), and alert(..) methods to adhere
  more completely with RFC 3164
+ SyslogServerEvent now parses incoming log data to determine level,
  facility, date, and host
+ Several fixes to accommodate remote InetAddress information for
  SyslogServerEvent
+ Added SyslogUtility.getLevel(String)
+ JUnit test improvements; 76.4% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.26 (03/29/2009)
+ Added SSLTCPNetSyslogServer and supporting classes for SSL/TLS
  server support
+ Added keyStore, trustStore, keyStorePassword, and trustStorePassword
  configuration options to SSL/TLS-related configuration classes
+ Refactored some configuration/method naming for consistency
+ JUnit test improvements; 76.0% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.25 (01/27/2009)
+ Removed delimiterSequence code from SyslogMessageProcessorIF,
  SyslogMessageProcessor, AbstractSyslog, and all calling subclasses;
  instead, a separate OutputStream.write(..) is called for the delimiter
+ Added a Socket.setSendBufferSize(..) call to TCPNetSyslogWriter;
  this is combined with the delimiterSequence moved to a separate
  OutputStream.write(..) call solves a problem where a single message
  was lost every time a connection failure occurred between Syslog4j
  and a syslog TCP server
+ Added more configuration properties to TCPNetSyslogConfig[IF] to
  remove hard-coded values
+ JUnit test improvements; 75.1% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.24 (01/24/2009)
+ Fixes to AbstractSyslog and TCPNetSyslogWriter to properly handle
  when TCP-based Syslog servers stop accepting connections and
  then resume accepting connections
+ BacklogHandler down() and up() methods now working properly
+ Added maxAttempts to TCPNetSyslogConfig[IF] to remove hard-coded
  "try twice" loop for trying twice to write a message to a TCP-based
  Syslog server
+ Renamed all naming of "backlog" to "backLog" and "Backlog" to
  "BackLog" for consistency's sake; except for the literal
  TCP Socket concept of "backlog"
+ Fixed MultipleSyslog.getProtocol() to actually return protocol name
+ JUnit test improvements; 75.0% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.23 (01/23/2009)
+ Added Log4jSyslogBacklogHandler to use Log4j as a backup if a
  Syslog protocol fails
+ Improvements to BacklogHandlers to flag "up" and "down" conditions.
+ TCPNetSyslog fixed getWriter(..) to not create new threads upon
  a flush() or shutdown() call 
--------------------------------------------------------------------------
Version 0.9.22 (12/09/2008)
+ Refactored SyslogConfigIF and AbstractSyslogConfig to use more
  interfaces (AbstractSyslogConfigIF, AbstractNetSyslogConfigIF,
  TCPNetSyslogConfigIF) in order to reduce forced casts and forced
  inheritance models
+ JUnit test improvements; 74.1% instruction code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.21 (11/26/2008)
+ Modified PooledTCPNetSyslogConfig to force maxIdle, minIdle, and
  maxActive to the same value when isThreaded is true
+ TCPNetSyslog overridden for backlog(..) methods to strip delimiter
  from message
+ Fixed SyslogServer.exists(String protocol) to be case insensitive
+ JUnit test improvements; now at 72.2% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.20
+ Added writeAttempts option to retry after a single Socket exception;
  defaults to 2
+ Bugfixes relating to SyslogBacklogHandlers
+ JUnit test improvements; now at 72.1% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.19
+ Numerous bugfixes relating to the Writer, TCPNetSyslog, and
  SSLTCPNetSyslog implementations
+ Performance/reliability improvements related to Thread handling
+ JUnit test improvements; maintained 71.3% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.18
+ Added SyslogBacklogHandlerIF, PrintStreamSyslogBacklogHandler,
  SystemErrSyslogBacklogHandler, and SystemOutSyslogBacklogHandler
  for handling logging when a failure occurs
+ Added support for Apache Commons Pooling for the TCP-based protocols,
  with NetSyslogPoolFactory, PooledTCPNetSyslog, PooledTCPNetSyslogConfig,
  and PooledSSLTCPNetSyslogConfig
+ Reworked the "Writer" implementation into AbstractNetWriter to support
  pooling
+ Added Threaded JUnit tests for TCP, UDP, and pooling
+ Added MultipleSyslog and MultipleSyslogConfig to conveniently send
  to more than one Syslog server simultaneously
+ JUnit test improvements; now at 71.3% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.17
+ Added support for secure syslog messages (via TCP over SSL) with
  SSLTCPNetSyslogWriter and SSLTCPNetSyslogConfig classes
+ Refactored several classes to introduce the "ident" concept to all
  syslog implementations in lieu of only the UnixSyslog syslog
  implementation
+ Refactored PCISyslogMessage to remove appId (for good this time)
+ Created Syslog.initialize(), Syslog.shutdown(),
  SyslogServer.initialize(), and SyslogServer.shutdown()
+ JUnit test improvements; now at 70.2% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.16
+ OSDetectUtility.isWindows() fixed
+ JUnit test improvements; now at 66.8% code coverage (EclEmma)
--------------------------------------------------------------------------
Version 0.9.15
+ Added appId to PCISyslogMessage
+ Moved StringCaseSyslogMessageModifier into the "text" subpackage
+ Added PrefixSyslogMessageModifier and SuffixSyslogMessageModifier
+ Added helper create methods to MacSyslogMessageModifier
--------------------------------------------------------------------------
Version 0.9.14
+ Added AbstractSyslogMessage for creating POJOs for logging
+ Added PCISyslogMessageIF and PCISyslogMessage to support PCI DSS
  audit logging (see PCISyslogMessage Javadoc for details)
+ Moved the syslog packet processing code out of SyslogUtility into
  SyslogMessageProcessor (implements SyslogMessageProcessorIF
  interface) allowing it to be customized
+ Reorganized messagemodifier and some server classes into more
  logical package structures
--------------------------------------------------------------------------
Version 0.9.13
+ Added Thread support to TcpNetSyslog implementation; added
  TcpNetSyslogWriter to facilitate
+ Modified TcpNetSyslogServer and UdpNetSyslogServer to support
  binding to a specific host
+ Modified TcpNetSyslogServer to support ServerSocket's "backlog"
  parameter
+ Modified ChecksumSyslogMessageModifier and HashSyslogMessageModifier
  classes to not statically create convenience instances (may have issues
  on some non-Sun JCE implementations)
+ Documentation improvements
--------------------------------------------------------------------------
Version 0.9.12
+ Added DNS address caching mechanism to TCP and UDP implementations
  (introduced AbstractNetSyslog for this)
+ Documentation additions to the FAQ
--------------------------------------------------------------------------
Version 0.9.11
+ Switched Base64Encoder/Base64Decoder with public domain Base64
  class (http://iharder.sourceforge.net/current/java/base64/) for
  speed improvement; added Base64CompareTest which was used to validate
  the speed improvement
+ Added convenience methods in SyslogServer for creating Threads
+ Added thread getter/setter in SyslogServerIF and AbstractSyslogServer
--------------------------------------------------------------------------
Version 0.9.10
+ Added Log4j Appender support via Syslog4jAppenderSkeleton and
  Syslog4jAppender (both are works in progress)
--------------------------------------------------------------------------
Version 0.9.9
+ Added SequentialSyslogMessageModifier
--------------------------------------------------------------------------
Version 0.9.8
+ Added SyslogServerEventIF interface
+ Modified ANT build process to include debug flags when compiling
  classes for syslog4j-x.y.z.jar (source + binary)
+ Documentation additions
--------------------------------------------------------------------------
Version 0.9.7
+ Added StringCaseSyslogMessageModifier, HashSyslogMessageModifier,
  MacSyslogMessageModifier, and improved ChecksumSyslogMessageModifier
+ Added test cases to SyslogMessageModifierTest
--------------------------------------------------------------------------
Version 0.9.6
+ Added SyslogMessageModifierIF to allow checksums, hashes, etc. to
  be added to each message
+ Added ChecksumSyslogMessageModifier, LowerCaseSyslogMessageModifier,
  and UpperCaseSyslogMessageModifier
+ Added SyslogMessageModifierTest JUnit test case
+ Created getBytes(config) method to SyslogUtility to remove need for
  UnsupportedEncodingException catches in every class that uses it
--------------------------------------------------------------------------
Version 0.9.5
+ Added setSoLinger(true,1) for TCP client to solve lost packets problem
  on Unix (and potentially other platforms)
+ Documentation improvements
--------------------------------------------------------------------------
Version 0.9.4
+ Removed forced dependency on JNA
--------------------------------------------------------------------------
Version 0.9.3
+ Preliminary support for Unix Domain Sockets (AF_UNIX) using JNI
--------------------------------------------------------------------------
Version 0.9.2
+ Cleanup, test cases, etc. 
--------------------------------------------------------------------------
Version 0.9.1
+ Initial working TCP/UDP build
--------------------------------------------------------------------------
Version 0.9.0
+ Project started
--------------------------------------------------------------------------
 