-------------------------------------------------------------------------- Document: Syslog4j CHANGELOG.txt Version: $Id: CHANGELOG.txt,v 1.74 2011/01/23 20:49:09 cvs Exp $ URL: http://www.syslog4j.org/ -------------------------------------------------------------------------- Version 0.9.46 (1/23/2011) + Added Syslog.setSuppressRuntimeExceptions(boolean) and SyslogServer.setSuppressRuntimeExceptions(boolean) - default false - to allow some methods to return null instead of throwing exceptions (Thanks, Dan!) + Added "UseStructuredData" parameter to Syslog4jAppenderSkeleton in order to be able to turn on RFC 5424 when using Syslog4j with Log4j (Thanks, Francesco!) + Added missing "LocalName" parameter to Syslog4jAppenderSkeleton + JUnit test improvements -------------------------------------------------------------------------- Version 0.9.45 (1/10/2011) + Fixed Unicode-related length problem in AbstractSyslog.write(..) (Thanks, Anton!) + After some review, introduced prerequisite of Joda Time library for Structured Syslog (RFC 5424) messages; changes made to StructuredSyslogMessageProcessor, SyslogServerConfigIF, AbstractSyslogServer, AbstractSyslogServerConfig, and StructuredSyslogServerEvent (Thanks, Maria and Jan!) + RFC3339TimestampUtility class removed + Fixed host parsing in StructuredSyslogServerEvent (thanks, Lennart!) + Fixed facility/level computation in SyslogServerEvent (thanks, Lennart!) + JUnit test improvements; 83.2% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.44 (11/28/2010) + Refactored SyslogServerEvent, removing System.arraycopy(..) call from every instance and allowing construction using both String and byte[]; should reduce memory/garbage collection footprint + Removed check in TCPNetSyslogWriter for "software caused" Exception; now will attempt to send again + Added TCPNetSyslogServerConfigIF.setTimeout(..) to close connections after specified idle time; defaults to no timeout (0) + Added timeout boolean to SyslogServerSessionEventHandlerIF.sessionClosed(..) + Modified UnixSyslog to use native close(fd) instead of shutdown(fd,how) + Modified UnixSyslog to use ByteBuffer instead of byte[] in write(..) + JUnit test improvements; 83.1% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.43 (11/11/2010) + IMPORTANT TO THOSE USING THE SyslogServer IMPLEMENTATION: Created SyslogServerSessionEventHandlerIF and SyslogServerSessionlessEventHandlerIF; use these instead of SyslogServerEventHandlerIF + Improved session handling within the SyslogServerSessionEventHandlerIF + JUnit test improvements; 82.5% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.42 (10/29/2010) + Added isUseDaemonThread() and setUseDaemonThread(..) to AbstractSyslogConfigIF and ServerConfigIF; defaults to true, which means SyslogWriter (used by TCP Syslog4j protocol) and SyslogServer implementations use Daemon-style threads and will now automatically close on JVM exit + Added getThreadPriority() and setThreadPriority(..) to AbstractSyslogConfigIF and ServerConfigIF; defaults to -1 (no priority will be set) + Added getFreshConnectionInterval() and setFreshConnectionInterval(..) to TCPNetSyslogConfig which closes TCP/IP client sockets and reopens "fresh" ones after the provided interval has passed between log entries; useful for some firewall and load-balancing environments; defaults to -1 (behavior disabled) + Added Syslog.destroyInstance(SyslogIF) and SyslogServer.destroyInstance(SyslogServerIF) methods + Added SyslogServerEventIF.isHostStrippedFromMessage() to indicate that the host name provided is the message is the same as the source system and was (therefore) stripped from the message + JUnit test improvements; 81.4% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.41 (10/28/2010) + Removed SyslogIF parameter from verify(..) methods introduced in 0.9.40 for SyslogMessageModifier implementations + Improved SyslogServerEvent for better host address and host name matching/parsing + Added destroyInstance(..) to SyslogServer (thanks, Dan!) + JUnit test improvements; 81.1% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.40 (10/27/2010) + Added verify(..) methods in the SyslogMessageModifier implementations which can be used to verify signatures, hashes, and checksum values + Removed extraneous SyslogConfigIF parameter to SyslogMessageModifier implementations (since the first parameter is SyslogIF and its getConfig() method can be used) + Reworked SyslogServerEventHandlerIF to allow support for keeping session information (when used by TCP-based protocols) + Miscellaneous bug fixes and corrections, including small bug in AbstractSyslogMessageModifierConfig.setPrefix(..) + JUnit test improvements; 80.8% instruction code coverage maintained (EclEmma) (note: this value obtained when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.39 (10/24/2010) + Added maxQueueSize parameter to Syslog4j protocol config objects in order to prevent memory leaks caused by high-volume clients; defaults to -1 (no maximum queue size); any messages attempted to be logged beyond the maximum queue size will utilize the BackLog capability; tip: add NullSyslogBackLogHandler.INSTANCE if messages should just be dropped (thanks to Avishay for the idea and sample code!) + Switched all try { Thread.sleep(..) } blocks from Syslog4j code base to newly created SyslogUtility.sleep(long) convenience method + Updated new versions of 3rd party JARs (jar-3.2.7, log4j-1.2.16, and commons-pool-1.5.5) + Modified AbstractSyslogConfig to initialize(..) BackLogHandler instances upon calling addBackLogHandler(..) and insertBackLogHandler(..) + Minor code cleanup in UnixSyslog + JUnit test improvements; 80.8% instruction code coverage maintained (EclEmma) (note: this value obtained when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.38 (09/11/2010) + Patched StructuredSyslogMessage to better adhere to RFC 5424 when dealing with empty String values (Thanks, Manish!) + JUnit test improvements; 80.8% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.37 (06/26/2010) + Added HTMLEntityEscapeSyslogModifier to ensure HTML-based log messages are escaped before being received by the server; this prevents malicious log entries from executing code on browsers when using poorly-written log viewer software (Thanks for the idea, Rob!) + JUnit test improvements; 80.7% instruction code coverage (EclEmma) (when executed on MacOSX) -------------------------------------------------------------------------- Version 0.9.36 (06/13/2010) + BUG FIX: Modified UnixSyslog to pass in a Memory object to openlog(..) instead of a String value (Thanks, Maik!) -------------------------------------------------------------------------- Version 0.9.35 (03/25/2010) + BUG FIX: Modified TCPNetSyslogWriter's shutdown() method to properly check for null or closed sockets, take 2 (Thanks, Vladimir!) -------------------------------------------------------------------------- Version 0.9.34 (03/19/2010) + BUG FIX: Modified TCPNetSyslogWriter's shutdown() method to properly check for null or closed sockets (Thanks, Vladimir!) -------------------------------------------------------------------------- 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 --------------------------------------------------------------------------