You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Matt Sicker <bo...@gmail.com> on 2017/01/27 16:18:05 UTC

[ANN] Log4j 2.8 released

The Apache Log4j 2 team is pleased to announce the Log4j 2.8 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 several bugfixes and new features. The new
features include the ability
to have the RollingFileAppender log directly to the archive files.
More details on the new features and
fixes are itemized below.

Note that subsequent to the 2.6 release a minor source incompatibility
was found due to the
addition of new methods to the Logger interface. If you have code that does:

logger.error(null, “This is the log message”, throwable);

or similar with any log level you will get a compiler error saying the
reference is ambiguous.
To correct this either do:

logger.error(“This is the log message”, throwable);

or

logger.error((Marker) null, “This is the log message”, throwable);

The Log4j 2.8 API, as well as many core components, maintains binary
compatibility with previous releases.

GA Release 2.8

Changes in this version include:

New features:
o LOG4J2-1032:  Make DefaultRolloverStrategy more efficent when
renaming files. Add nomax option to the fileIndex attribute.
o LOG4J2-1101:  RollingFileAppender now supports omitting the file
name and writing directly to the archive files.
o LOG4J2-1243:  Allow default value in property to be a Lookup.
o LOG4J2-1787:  Document how to exclude transitive conflicting
dependencies in Maven and Gradle.
o LOG4J2-1773:  Add StatusLoggerRule to allow unit tests to set a status level.
o LOG4J2-424:  Add non-string data type support to JdbcAppender via
new ColumnMapping plugin.
o LOG4J2-1771:  Add a Builder to ColumnConfig and deprecate
ColumnConfig.createColumnConfig().
o LOG4J2-1770:  Add a Builder to JdbcAppender and deprecate
JdbcAppender.createAppender().
o LOG4J2-1764:  Use MethodHandle in ContextDataFactory cached constructor.
o LOG4J2-1730:  Add Apache Cassandra appender and ColumnMapping plugin.
o LOG4J2-1759:  Add TypeConverter for java.util.UUID.
o LOG4J2-1758:  Add TypeConverter for java.nio.file.Path.
o LOG4J2-1755:  Add TypeConverter and constraint validators for
java.net.InetAddress and port numbers.
o LOG4J2-969:  Refactor SyslogAppender so that Layout is a Plugin element.
o LOG4J2-1660:  Added public method
ThreadContext::getThreadContextMap; removed class ThreadContextAccess.
o LOG4J2-1379:  Add documentation regarding YAML configuration format.
o LOG4J2-1718:  Introduce marker interface AsynchronouslyFormattable.
o LOG4J2-1681:  Introduce interfaces IndexedStringMap and
IndexedReadOnlyStringMap, supporting garbage-free iteration over
sorted map.
o LOG4J2-1695:  Add a Builder to ScriptPatternSelector and deprecate
ScriptPatternSelector.createSelector().
o LOG4J2-1696:  Add a Builder to MarkerPatternSelector and deprecate
MarkerPatternSelector.createSelector().
o LOG4J2-1697:  Add a SerializerBuilder to PatternLayout and deprecate
PatternLayout.createSerializer().
o LOG4J2-1701:  Add a Builder to RandomAccessFileAppender and
deprecate RandomAccessFileAppender.createAppender().
o LOG4J2-1703:  Add a Builder to MemoryMappedFileAppender and
deprecate MemoryMappedFileAppender.createAppender().
o LOG4J2-1704:  Add a Builder to RollingRandomAccessFileAppender and
deprecate RollingRandomAccessFileAppender.createAppender().
o LOG4J2-1709:  Add a Builder to SyslogAppender and deprecate
SyslogAppender.createAppender().
o LOG4J2-1707:  Allow TCP Socket Appender to set socket options.
o LOG4J2-1708:  Allow Secure Socket Appender to set socket options.
o LOG4J2-1737:  Add a Builder to SyslogLayout and deprecate
SyslogLayout.createLayout(Facility, boolean, String, Charset).
o LOG4J2-1738:  Add a Builder to JsonLayout and deprecate
org.apache.logging.log4j.core.layout.JsonLayout.createLayout(Configuration,
boolean, boolean, boolean, boolean, boolean, boolean, String, String,
Charset, boolean).
o LOG4J2-1739:  Add Builder to KafkaAppender and deprecate
KafkaAppender.createAppender(Layout, Filter, String, boolean, String,
Property[], Configuration).
o LOG4J2-1733:  Add SyncSend attribute to KafkaAppender (as in
KafkaLog4jAppender). Thanks to Vincent Tieleman.

Fixed Bugs:
o LOG4J2-1780:  Eliminate the use of the ExecutorServices in the LoggerContext.
o LOG4J2-1786:  ConfigurationScheduler now preserves interrupt flag
during stop.
o LOG4J2-1779:  Fixed bug where AsyncLogger did not resolve
configuration properties.
o LOG4J2-1769:  Fixed concurrency issue affecting all layouts except
PatternLayout and GelfLayout, which caused scrambled output and
exceptions when logging synchronously from multiple threads. Thanks to
Brandon Goodin.
o LOG4J2-1724:  Using variables in GelfLayout's additional fields at
runtime. Thanks to Alexander Krasnostavsky.
o LOG4J2-1762:  Add Builder to GelfLayout.
o LOG4J2-1649:  Insure the ConfigurationScheduler shuts down without
blocking. Thanks to Georg Friedrich.
o LOG4J2-1653:  CronTriggeringPolicy would use the wrong date/time
when rolling over and create multiple triggering policies on
reconfiguration. Thanks to Georg Friedrich.
o LOG4J2-1748:  Do not use non-daemon thread pool for rollover tasks.
o LOG4J2-1628:  Fixed file locking regression in FileAppender
introduced in 2.6.
o LOG4J2-1744:  The custom logger Generate tool no longer requires the
log4j-api module on the classpath.
o LOG4J2-1731:  SslSocketManager now respects connectTimeoutMillis.
Thanks to Chris Ribble.
o LOG4J2-1682:  Logger using LocalizedMessageFactory prints key
instead of message. Thanks to Markus Waidhofer.
o LOG4J2-1720:  Make GelfLayout independent of Jackson.
o LOG4J2-1719:  Fixed race condition in ObjectMessage and
SimpleMessage, ensuring that the log message contains the value the
object has during the logging call.
o LOG4J2-1688:  Fixed bug where elements of a log message parameter
array were nulled out in garbage-free mode.
o LOG4J2-1692:  Add putAll() method to CloseableThreadContext. Thanks
to Greg Thomas.
o LOG4J2-1689:  Add CleanableThreadContextMap interface supporting
method removeAll(Iterable<String>).
o LOG4J2-1685:  Option 'disableAnsi' in PatternLayout to
unconditionally disable ANSI escape codes. Thanks to Raman Gupta.
o LOG4J2-1706:  Make TimeFilter usable as global filter and as logger filter.
o LOG4J2-1722:  (GC) Avoid allocating temporary objects in
VariablesNotEmptyReplacementConverter.
o LOG4J2-1717:  (GC) Avoid allocating temporary objects in
EncodingPatternConverter.
o LOG4J2-1716:  (GC) Avoid allocating temporary objects in
MapPatternConverter. (Note that constructing a MapMessage is not
garbage-free.)
o LOG4J2-1683:  (GC) Avoid allocating temporary objects in MapMessage.
o LOG4J2-1715:  (GC) Avoid allocating temporary objects in
NdcPatternConverter. (Note that use of the ThreadContext stack is not
garbage-free.)
o LOG4J2-1714:  (GC) Avoid allocating temporary objects in
AbstractStyleNameConverter.
o LOG4J2-1680:  (GC) Avoid allocating temporary objects in TimeFilter.
o LOG4J2-1679:  (GC) Avoid allocating temporary objects in
StructuredDataFilter.
o LOG4J2-1678:  (GC) Avoid allocating temporary objects in
ThreadContextMapFilter.
o LOG4J2-1677:  (GC) Avoid allocating temporary objects in MapFilter.
o LOG4J2-1674:  (GC) Avoid allocating temporary objects in ThresholdFilter.
o LOG4J2-1673:  (GC) Avoid allocating temporary objects in MarkerFilter.
o LOG4J2-1672:  (GC) Avoid allocating temporary objects in LevelRangeFilter.
o LOG4J2-1671:  (GC) Avoid allocating temporary objects in
EqualsIgnoreCaseReplacementConverter.
o LOG4J2-1670:  (GC) Avoid allocating temporary objects in
EqualsReplacementConverter.
o LOG4J2-1669:  (GC) Avoid allocating temporary objects in MaxLengthConverter.
o LOG4J2-1668:  (GC) Avoid allocating temporary objects in
MarkerPatternConverter.
o LOG4J2-1667:  (GC) Avoid allocating temporary objects in
SequenceNumberPatternConverter.
o LOG4J2-1666:  (GC) Avoid allocating temporary objects in
RelativeTimePatternConverter.
o LOG4J2-1665:  (GC) Avoid allocating temporary objects in
IntegerPatternConverter.
o LOG4J2-1637:  Fixed problems when used in OSGi containers
(IllegalAccessError, NoClassDefFoundError).
o LOG4J2-1226:  Improve LogEvent serialization to handle
non-serializable Messages and deserializing when required classes are
missing.
o LOG4J2-1663:  Ensure SortedArrayStringMap can be serialized and
deserialized without errors regardless of content.
o LOG4J2-1658:  Prevent NPE in
ThreadContextMapFactory::createThreadContextMap when initializing
Log4j with Configurator::initialize and the BasicContextSelector is
used.
o LOG4J2-1645:  Immutable empty StringMap.
o LOG4J2-1623:  Configurable JVM shutdown hook timeout.
o LOG4J2-1712:  Pick up bug fixes from Apache Commons Lang's
org.apache.commons.lang3.time package.
o LOG4J2-1636:  Console Appender does not pick up Oracle Java 8's
sun.stdout.encoding and sun.stderr.encoding. Thanks to Eldar
Gabdullin.
o LOG4J2-1639:  Fix MemoryMappedFileAppender.createAppender() Javadoc
for immediateFlush. Thanks to Sridhar Gopinath.
o LOG4J2-1676:  Some LogEvents may not carry a Throwable (Use
Message.getThrowable() in log(Message) methods.) Thanks to Joern
Huxhorn.
o LOG4J2-1723:  Unwanted transitive dependency on
geronimo-jms_1.1_spec causes OSGi tests to fail. Thanks to Ludovic
HOCHET.
o LOG4J2-1664:  Improve OSGi unit tests. Thanks to Ludovic HOCHET.
o LOG4J2-1687:  NPE in ThrowableProxy when resolving stack in Java
EE/OSGi environment. Thanks to Robert Christiansen.
o LOG4J2-1642:  DefaultShutdownCallbackRegistry can throw a
NoClassDefFoundError. Thanks to Johno Crawford.
o LOG4J2-1474:  CronTriggeringPolicy raise exception and fail to
rollover log file when evaluateOnStartup is true. Thanks to yin
mingjun, Neon.
o LOG4J2-1734:  SslSocketManagerFactory might leak Sockets when
certain startup errors occur.
o LOG4J2-1736:  TcpSocketManagerFactory might leak Sockets when
certain startup errors occur.
o LOG4J2-1740:  Add CronTriggeringPolicy programmatically leads to NPE.
o LOG4J2-1743:  CompositeConfiguration does not add filters to
appenderRefs. Thanks to Toby Shepheard.
o LOG4J2-1756:  Adds xmlns in schema and some other tags. Thanks to
shubhankar1100.

Changes:
o LOG4J2-1781:  Update Conversant Disruptor from 1.2.7 to 1.2.10
o LOG4J2-1774:  Replace MockEJB dependency in unit tests with Spring
Test and Mockito.
o LOG4J2-1644:  Inefficient locking in AbstractLoggerAdapter. Thanks
to Tim Gokcen, Pavel Sivolobtchik.
o LOG4J2-1641:  Update JeroMQ from 0.3.5 to 0.3.6.
o LOG4J2-1647:  Update Commons Lang from 3.4 to 3.5.
o LOG4J2-1646:  Migrate to Mockito 2.x in unit tests.
o LOG4J2-1655:  Update Jackson from 2.8.3 to 2.8.4.
o LOG4J2-1735:  Update Jackson from 2.8.4 to 2.8.5.
o LOG4J2-1656:  Update Apache Flume from 1.6.0 to 1.7.0.
o LOG4J2-1698:  Update LMAX Disruptor from 3.3.5 to 3.3.6.
o LOG4J2-1700:  Update Jansi from 1.13 to 1.14.
o LOG4J2-1750:  Update Kafka from 0.10.0.1 to 0.10.1.1.
o LOG4J2-1751:  Update liquibase-core from 3.5.1 to 3.5.3.
o LOG4J2-1302:  The log4j-slf4j-impl module now declares a runtime
dependency on log4j-core. While not technically required, this makes
the log4j-slf4j-impl module behave similarly to slf4j-log4j12, and
facilitates migration to Log4j 2.


Apache Log4j 2.8 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/


-- 
Matt Sicker <bo...@gmail.com>