Blogged: https://blogs.apache.org/logging/entry/log4j-2-9-released
(Shameless plug) Every java main() method deserves http://picocli.info > On Aug 31, 2017, at 9:26, Ralph Goers <ralph.go...@dslextreme.com> wrote: > > The Apache Log4j 2 team is pleased to announce the Log4j 2.9.0 release! > > Apache Log4j is a well known framework for logging application behavior. > Log4j 2 is an upgrade to Log4j that provides significant improvements over > its predecessor, Log4j 1.x, and provides many other modern features such as > support for Markers, lambda expressions for lazy logging, property > substitution using Lookups, multiple patterns on a PatternLayout and > asynchronous Loggers. Another notable Log4j 2 feature is the ability to be > "garbage-free" (avoid allocating temporary objects) while logging. In > addition, Log4j 2 will not lose events while reconfiguring. > > This release contains the first support of Java 9 as well as bugfixes and > minor enhancements. The Log4j API was modified to use java.util.ServiceLoader > to locate Log4j implementations, although the former binding mechanism is > still supported. The Log4j jar is now a multi-release jar to provide > implementations of the Java 9 specific classes. Multi-release jars are not > supported by the OSGi specification so OSGi modules will not be able to take > advantage of these implementations but will not lose functionality as they > will fall back to the implementations used in Java 7 and 8. More details on > the new features and fixes are itemized below. > > Note that subsequent to the 2.9 release, for security reasons, > SerializedLayout is deprecated and no longer used as default in the Socket > and JMS appenders. SerializedLayout can still be used as before, but has to > be specified explicitly. To retain old behaviour, you have to change > configuration like: > > <Appenders> > <Socket name="socket" host="localhost" port="9500"/> > </Appenders> > into: > > <Appenders> > <Socket name="socket" host="localhost" port="9500"> > <SerializedLayout/> > </Socket> > </Appenders> > We do, however, discourage the use of SerializedLayout and recommend > JsonLayout as a replacement: > > <Appenders> > <Socket name="socket" host="localhost" port="9500"> > <JsonLayout properties="true"/> > </Socket> > </Appenders> > Note that subsequent to the 2.9 release, for security reasons, Log4j does not > process DTD in XML files. If you used DTD for including snippets, you have to > use XInclude or Composite Configuration instead. > > The Log4j 2.9.0 API, as well as many core components, maintains binary > compatibility with previous releases. > > <https://github.com/apache/logging-log4j2/blob/master/RELEASE-NOTES.md#ga-release-290>GA > Release 2.9.0 > > Changes in this version include: > > <https://github.com/apache/logging-log4j2/blob/master/RELEASE-NOTES.md#new-features>New > Features > > LOG4J2-2008 <https://issues.apache.org/jira/browse/LOG4J2-2008>: Support > printing multiple StructuredData elements in RFC5424Layout. > LOG4J2-1986 <https://issues.apache.org/jira/browse/LOG4J2-1986>: Public API > for parsing the output from JsonLayout/XmlLayout/YamlLayout into a LogEvent. > LOG4J2-1981 <https://issues.apache.org/jira/browse/LOG4J2-1981>: JsonLayout, > XmlLayout and YamlLayout support 0-byte termination of log events. > LOG4J2-1864 <https://issues.apache.org/jira/browse/LOG4J2-1864>: Support > capped collections for MongoDb appender. Thanks to Matthias Kappeller. > LOG4J2-1813 <https://issues.apache.org/jira/browse/LOG4J2-1813>: Log4j2 will > now print all internal logging to the console if system property log4j2.debug > is defined with any value (or no value). > LOG4J2-1766 <https://issues.apache.org/jira/browse/LOG4J2-1766>: Temporary > compress directory during rollover (#88). Thanks to Pierrick HYMBERT. > LOG4J2-1814 <https://issues.apache.org/jira/browse/LOG4J2-1814>: Added > wrapper classes CustomLoggerGenerator and ExtendedLoggerGenerator to avoid > class name with a dollar ($) character which has special meaning in many *nix > command line environments. > LOG4J2-1884 <https://issues.apache.org/jira/browse/LOG4J2-1884>: Added > process ID (pid) pattern converter. > LOG4J2-1699 <https://issues.apache.org/jira/browse/LOG4J2-1699>: Configurable > Log File Permissions with PosixFilePermission. Thanks to Demetrios Dimatos, > Pierrick HYMBERT. > LOG4J2-1945 <https://issues.apache.org/jira/browse/LOG4J2-1945>: Generate > source jas for all test jars. > LOG4J2-1934 <https://issues.apache.org/jira/browse/LOG4J2-1934>: JMS Appender > does not know how to recover from a broken connection. > LOG4J2-1955 <https://issues.apache.org/jira/browse/LOG4J2-1955>: JMS Appender > should be able connect to a broker (later) even it is not present at > configuration time. > LOG4J2-1874 <https://issues.apache.org/jira/browse/LOG4J2-1874>: Added > methods ::writeBytes(ByteBuffer) and ::writeBytes(byte[], int, int) to > ByteBufferDestination interface and use these methods in TextEncoderHelper > where possible to prepare for future enhancements to reduce lock contention. > Thanks to Roman Leventov. > LOG4J2-1442 <https://issues.apache.org/jira/browse/LOG4J2-1442>: Generic HTTP > appender. > LOG4J2-1935 <https://issues.apache.org/jira/browse/LOG4J2-1935>: Add > with(String, primitive) methods to > org.apache.logging.log4j.message.MapMessage. > LOG4J2-1930 <https://issues.apache.org/jira/browse/LOG4J2-1930>: Add > forEach() methods to org.apache.logging.log4j.message.MapMessage. > LOG4J2-1932 <https://issues.apache.org/jira/browse/LOG4J2-1932>: Add > containsKey() methods to org.apache.logging.log4j.message.MapMessage. > LOG4J2-1854 <https://issues.apache.org/jira/browse/LOG4J2-1854>: Support null > byte delimiter in GelfLayout. Thanks to Xavier Jodoin. > LOG4J2-1359 <https://issues.apache.org/jira/browse/LOG4J2-1359>: Add support > for Java 9 StackWalker. > LOG4J2-1880 <https://issues.apache.org/jira/browse/LOG4J2-1880>: Warn when a > configuration file for an inactive ConfigurationFactory is found. > LOG4J2-1855 <https://issues.apache.org/jira/browse/LOG4J2-1855>: Add an > optional random delay in TimeBasedTriggeringPolicy Thanks to Anthony Maire. > LOG4J2-1860 <https://issues.apache.org/jira/browse/LOG4J2-1860>: Shortcut to > add Property and KeyValuePair component in ConfigurationBuilder. > LOG4J2-1294 <https://issues.apache.org/jira/browse/LOG4J2-1294>: The JMS > Appender should use a JMS MapMessage for a Log4j MapMessage. > <https://github.com/apache/logging-log4j2/blob/master/RELEASE-NOTES.md#fixed-bugs>Fixed > Bugs > > LOG4J2-1833 <https://issues.apache.org/jira/browse/LOG4J2-1833>: Prevent > NullPointerException when a file name is specified with the > DirectWriteRolloverStrategy. > LOG4J2-2018 <https://issues.apache.org/jira/browse/LOG4J2-2018>: Fix > incorrect documentation for LoggerNameLevelRewritePolicy. > LOG4J2-922 <https://issues.apache.org/jira/browse/LOG4J2-922>: Parameter of > mdcId in SyslogAppender has no default value. Thanks to angus.aqlu, Paul > Burrowes. > LOG4J2-2001 <https://issues.apache.org/jira/browse/LOG4J2-2001>: > StyleConverter.newInstance argument validation is incorrect. Thanks to Paul > Burrowes. > LOG4J2-1999 <https://issues.apache.org/jira/browse/LOG4J2-1999>: > HighlightConverter converts all unrecognized levels to DEBUG. Thanks to Paul > Burrowes. > LOG4J2-2013 <https://issues.apache.org/jira/browse/LOG4J2-2013>: > SslSocketManager does not apply SSLContext on TCP reconnect. Thanks to Taylor > Patton, Gary Gregory. > LOG4J2-2016 <https://issues.apache.org/jira/browse/LOG4J2-2016>: Mark > FileRenameAction as successful when using alternative ways to move files. > Thanks to Benjamin Jaton. > LOG4J2-2012 <https://issues.apache.org/jira/browse/LOG4J2-2012>: No > compression when using a separate drive in Linux. Thanks to Benjamin Jaton. > LOG4J2-1888 <https://issues.apache.org/jira/browse/LOG4J2-1888>: Log4j throws > a java.nio.charset.UnsupportedCharsetException: cp65001. Thanks to Misagh > Moayyed. > LOG4J2-1990 <https://issues.apache.org/jira/browse/LOG4J2-1990>: > ConcurrentModificationException logging a parameter of type Map. Thanks to > Philippe Mouawad. > LOG4J2-1311 <https://issues.apache.org/jira/browse/LOG4J2-1311>: > SocketAppender will lose several events after re-connection to server. Thanks > to Xibing Liang. > LOG4J2-1977 <https://issues.apache.org/jira/browse/LOG4J2-1977>: Consider the > StringBuilder's capacity instead of content length when trimming. Thanks to > Jerry xnslong. > LOG4J2-1971 <https://issues.apache.org/jira/browse/LOG4J2-1971>: Register > log4j-core as an OSGi service. Skip tests for LOG4J2-1766 on MacOS. Use group > "staff" for LOG4J2-1699 test on MacOS. > LOG4J2-1994 <https://issues.apache.org/jira/browse/LOG4J2-1994>: > TcpSocketServer does not close accepted Sockets. > LOG4J2-1987 <https://issues.apache.org/jira/browse/LOG4J2-1987>: Log4J JUL > Bridge and RMI Security Manager causes access denied > ("java.util.logging.LoggingPermission" "control") Thanks to Andreas Felder. > LOG4J2-1982 <https://issues.apache.org/jira/browse/LOG4J2-1982>: > Log4j-config.xsd only allows one AppenderRef element for each Logger element. > Thanks to Christoph Lembeck. > LOG4J2-1985 <https://issues.apache.org/jira/browse/LOG4J2-1985>: Fix default > buffer size to match documentation (from 8102 to 8192 a.k.a. 8KB.) Thanks to > Kenneth McFarland. > LOG4J2-1912 <https://issues.apache.org/jira/browse/LOG4J2-1912>: > CompositeConfiguration logs warning "Unable to determine URI for > configuration." However, the reconfiguration is completed. Thanks to R Ri. > LOG4J2-1964 <https://issues.apache.org/jira/browse/LOG4J2-1964>: Dynamic > reconfiguration does not work for filePattern of RollingFile. Thanks to > Pierrick HYMBERT. > LOG4J2-1961 <https://issues.apache.org/jira/browse/LOG4J2-1961>: Reconfigure > breaks DirectWriteRolloverStrategy. Thanks to Christian Vent. > LOG4J2-1943 <https://issues.apache.org/jira/browse/LOG4J2-1943>: The > eventPrefix attribute was being ignored in the RFC5424Layout. > LOG4J2-1953 <https://issues.apache.org/jira/browse/LOG4J2-1953>: JndiManager > is not released when the JmsAppender builder catches an exception trying to > build itself. > LOG4J2-1911 <https://issues.apache.org/jira/browse/LOG4J2-1911>: Improve the > documentation of the DynamicThresholdFilter. > LOG4J2-1929 <https://issues.apache.org/jira/browse/LOG4J2-1929>: EOFException > with FormattedMessage. Thanks to Borys Sokolov. > LOG4J2-1948 <https://issues.apache.org/jira/browse/LOG4J2-1948>: Trim levels > read from properties file to remove trailing spaces. Thanks to Michael Lück. > LOG4J2-1971 <https://issues.apache.org/jira/browse/LOG4J2-1971>: > ClassCastException: org.eclipse.osgi.internal.loader.SystemBundleLoader$1 > cannot be cast to java.lang.ClassLoader. Thanks to liwenxian2017. > LOG4J2-1876 <https://issues.apache.org/jira/browse/LOG4J2-1876>: More > reliable checking for runtime dependencies. > LOG4J2-1867 <https://issues.apache.org/jira/browse/LOG4J2-1867>: Fix > configuration documentation. > LOG4J2-1858 <https://issues.apache.org/jira/browse/LOG4J2-1858>: Ensure the > ThreadLocal StringBuilder in ParameterizedMessage won't hold excessively much > memory after logging a long message. > LOG4J2-1885 <https://issues.apache.org/jira/browse/LOG4J2-1885>: Fix > documentation about default additivity value for loggers. > LOG4J2-1920 <https://issues.apache.org/jira/browse/LOG4J2-1920>: > ScriptEngineManager is not available in Android and causes a > NoClassDefFoundError. Thanks to Ajitha. > LOG4J2-1989 <https://issues.apache.org/jira/browse/LOG4J2-1989>: Clarify > Javadoc for AbstractTriggeringPolicy. Thanks to Kenneth McFarland. > LOG4J2-1993 <https://issues.apache.org/jira/browse/LOG4J2-1993>: Fix compiler > warnings in LoggerConfigTest. Thanks to Kenneth McFarland. > <https://github.com/apache/logging-log4j2/blob/master/RELEASE-NOTES.md#changes>Changes > > LOG4J2-1928 <https://issues.apache.org/jira/browse/LOG4J2-1928>: Add support > for DirectWriteRolloverStrategy to RollingRandomAcessFileAppender. > LOG4J2-2022 <https://issues.apache.org/jira/browse/LOG4J2-2022>: > RFC5424Layout now prints the process id. > LOG4J2-2020 <https://issues.apache.org/jira/browse/LOG4J2-2020>: Remove > default layout from KafkaAppender. > LOG4J2-2023 <https://issues.apache.org/jira/browse/LOG4J2-2023>: Use a class' > canonical name instead of name to create its logger name. > LOG4J2-2015 <https://issues.apache.org/jira/browse/LOG4J2-2015>: Allow > KeyStoreConfiguration and TrustStoreConfiguration to find files as resources. > LOG4J2-2011 <https://issues.apache.org/jira/browse/LOG4J2-2011>: Replace > JCommander command line parser with picocli to let users run Log4j2 utility > applications without requiring an external dependency. > LOG4J2-1984 <https://issues.apache.org/jira/browse/LOG4J2-1984>: Allow > maxLength of StructuredData to be specified by the user. > LOG4J2-1071 <https://issues.apache.org/jira/browse/LOG4J2-1071>: Allow for > bufferSize=0 in SMTP appender. Thanks to Ben Ludkiewicz, Benjamin Jaton. > LOG4J2-1261 <https://issues.apache.org/jira/browse/LOG4J2-1261>: Async > Loggers no longer use deprecated LMAX Disruptor APIs. (Disruptor-3.3.3 or > higher is now required.) > LOG4J2-1908 <https://issues.apache.org/jira/browse/LOG4J2-1908>: Improved > error message when misconfigured with multiple incompatible appenders > targeting same file. > LOG4J2-1954 <https://issues.apache.org/jira/browse/LOG4J2-1954>: > Configurations with multiple root loggers now fail loudly. > LOG4J2-1958 <https://issues.apache.org/jira/browse/LOG4J2-1958>: Deprecate > SerializedLayout and remove it as default. > LOG4J2-1959 <https://issues.apache.org/jira/browse/LOG4J2-1959>: Disable DTD > processing in XML configuration files. > LOG4J2-1950 <https://issues.apache.org/jira/browse/LOG4J2-1950>: Fix docker > build with jdk9 requirements (#84). Thanks to Pierrick HYMBERT. > LOG4J2-1801 <https://issues.apache.org/jira/browse/LOG4J2-1801>: Add more > detail to WARN "Ignoring log event" messages printed to the console after > log4j was shut down. > LOG4J2-1926 <https://issues.apache.org/jira/browse/LOG4J2-1926>: Facilitate > log4j use in Android applications: remove dependency on RMI and Management > APIs from log4j-api. > LOG4J2-1956 <https://issues.apache.org/jira/browse/LOG4J2-1956>: JMS Appender > broker password should be a char[], not a String. > LOG4J2-1917 <https://issues.apache.org/jira/browse/LOG4J2-1917>: Support > using java.util.ServiceLoader to locate Log4j 2 API providers. > LOG4J2-1966 <https://issues.apache.org/jira/browse/LOG4J2-1966>: Include > separator option of PatternLayout in manual (and other updates). Thanks to M > Sazzadul Hoque. > LOG4J2-1851 <https://issues.apache.org/jira/browse/LOG4J2-1851>: Move server > components from log4j-core to new log4-server module. > LOG4J2-1991 <https://issues.apache.org/jira/browse/LOG4J2-1991>: Refactor > SimpleMessage to be concise and clear (#100) Thanks to . > LOG4J2-2017 <https://issues.apache.org/jira/browse/LOG4J2-2017>: Update > Jackson from 2.8.9 to 2.9.0. > LOG4J2-1868 <https://issues.apache.org/jira/browse/LOG4J2-1868>: Update > ZeroMQ's JeroMQ from 0.3.6 to 0.4.0. > LOG4J2-1960 <https://issues.apache.org/jira/browse/LOG4J2-1960>: Update > ZeroMQ's JeroMQ from 0.4.0 to 0.4.1. > LOG4J2-1974 <https://issues.apache.org/jira/browse/LOG4J2-1974>: Update > ZeroMQ's JeroMQ from 0.4.1 to 0.4.2. > LOG4J2-1869 <https://issues.apache.org/jira/browse/LOG4J2-1869>: Update Kafka > client from 0.10.1.1 to 0.10.2.0 > LOG4J2-1962 <https://issues.apache.org/jira/browse/LOG4J2-1962>: Update Kafka > client from 0.10.2.0 to 0.11.0.0 > LOG4J2-1872 <https://issues.apache.org/jira/browse/LOG4J2-1872>: Update > JavaMail from 1.5.5 to 1.5.6. > LOG4J2-1879 <https://issues.apache.org/jira/browse/LOG4J2-1879>: Update JAnsi > from 1.14 to 1.15. > LOG4J2-1877 <https://issues.apache.org/jira/browse/LOG4J2-1877>: Missing > documentation for Max index limit in DefaultRolloverStrategy. Thanks to > Chandra Tungathurthi. > LOG4J2-1899 <https://issues.apache.org/jira/browse/LOG4J2-1899>: Add missing > getters to classes in package org.apache.logging.log4j.core.net.ssl. > LOG4J2-1900 <https://issues.apache.org/jira/browse/LOG4J2-1900>: Update JAnsi > from 1.15 to 1.16. > LOG4J2- <https://issues.apache.org/jira/browse/LOG4J2->: Update SLF4J from > 1.7.24 to 1.7.25. > LOG4J2-1938 <https://issues.apache.org/jira/browse/LOG4J2-1938>: Update > Jackson from 2.8.7 to 2.8.9. > LOG4J2-1970 <https://issues.apache.org/jira/browse/LOG4J2-1970>: Update > HdrHistogram from 2.1.8 to 2.1.9. > LOG4J2-1975 <https://issues.apache.org/jira/browse/LOG4J2-1975>: Update > javax.persistence from 2.1.0 to 2.1.1. > LOG4J2-1976 <https://issues.apache.org/jira/browse/LOG4J2-1976>: Update > org.osgi.core from 4.3.1 to 6.0.0. > Apache Log4j 2.9.0 requires a minimum of Java 7 to build and run. Log4j 2.3 > was the last release that supported Java 6. > > Basic compatibility with Log4j 1.x is provided through the log4j-1.2-api > component, however it does not implement some of the very implementation > specific classes and methods. The package names and Maven groupId have been > changed to org.apache.logging.log4j to avoid any conflicts with log4j 1.x. > > For complete information on Apache Log4j 2, including instructions on how to > submit bug reports, patches, or suggestions for improvement, see the Apache > Apache Log4j 2 website: > > https://logging.apache.org/log4j/2.x/ <https://logging.apache.org/log4j/2.x/>