The Apache Log4j 2 team is pleased to announce the Log4j 2.7 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 new logging API
modules for Scala 2.10 and 2.11, and support for various non-blocking queue 
implementations in
AsyncAppender. Furthermore the ThreadContext map can now be configured to be 
garbage-free, and
users can now inject context data from other sources than ThreadContext. 
Context data values can
be any Object, not just Strings. More details on the 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.7 API, as well as many core components, maintains binary 
compatibility with previous releases.

GA Release 2.7

Changes in this version include:

New features:
o LOG4J2-1578:  RoutingAppender can be configured with scripts. Add Script in a 
Routes element. 
o LOG4J2-1597:  Add a ScriptAppenderSelector to create an Appender specified by 
a Script. 
o LOG4J2-1349:  (GC) Added support for garbage-free ThreadContext map. Disabled 
by default, users need to enable this explicitly. 
o LOG4J2-1447:  (GC) Changed LogEvent's internal data structure for context 
data to be garbage-free. Added method LogEvent#getContextData(), deprecated 
method #getContextMap(). 
o LOG4J2-1010:  Users can now inject context data from other sources than 
ThreadContext. Values can be any Object, not just Strings. Thanks to Mikael 
Ståldal. 
o LOG4J2-1568:  Added support for java.util.concurrent.LinkedTransferQueue to 
AsyncAppender. 
o LOG4J2-1430:  Added optional support for Conversant DisruptorBlockingQueue in 
AsyncAppender. Thanks to John Cairns. 
o LOG4J2-1439:  Added optional support for JCTools MPSC bounded lock-free queue 
in AsyncAppender. Thanks to Anthony Maire. 
o LOG4J2-1558:  SocketAppender now supports IO buffering. 
o LOG4J2-1557:  Add a Builder for the SocketAppender (deprecates factory 
method). 
o LOG4J2-1609:  Add a Builder to ServletAppender and deprecate factory method. 
o LOG4J2-1553:  AbstractManager now implements AutoCloseable. 
o LOG4J2-1528:  Added ability to generate Log4j 2-style XML configuration file 
from ConfigurationBuilder. 
o LOG4J2-1181:  Added Logging API for Scala 2.10 and 2.11. 
o LOG4J2-1512:  Added options to exclude stack trace from JSON, XML and YAML 
layouts. 
o LOG4J2-1539:  Added Core API Configurator.shutdown(LoggerContext, long, 
TimeUnit). 
o LOG4J2-1501:  FileAppender is now able to create files on-demand. 
o LOG4J2-1504:  RollingFileAppender is now able to create files on-demand. 
o LOG4J2-1471:  [PatternLayout] Add an ANSI option to %xThrowable. 
o LOG4J2-1472:  org.apache.logging.log4j.core.LoggerContext now implements 
Closeable. 
o LOG4J2-1458:  [PatternLayout] Add an ANSI option to %message. 
o LOG4J2-1505:  Create a Builder for the FileAppender plugin to facilitate 
adding attributes in the future. 
o LOG4J2-1507:  Allow Builders to be completely generic. 
o LOG4J2-1508:  Allow a Builder to subclass another Builder. 
o LOG4J2-1516:  Add ThreadContextMap2 interface supporting method 
putAll(Map<String, String>). Thanks to Gary Gregory. 
o LOG4J2-1519:  Add ThreadContext.putAll(Map<String, String>). 
o LOG4J2-1520:  Add JUnit Rule implementations to manage the thread context. 
o LOG4J2-1547:  The Core AbstractConfiguration now tracks its LoggerContext and 
add Configuration.getLoggerContext(). 
o LOG4J2-1540:  The Core AbstractManager now tracks its LoggerContext. 
o LOG4J2-1577:  Add a Builder to the RoutingAppender and deprecate factory 
method. 

Fixed Bugs:
o LOG4J2-1618:  Fixed ClassCastException when using JUL logging during 
shutdown. Thanks to Raman Gupta. 
o LOG4J2-1620:  2.7-rc1: RollingFileAppender immediateFlush default value 
should be true, not false. Thanks to Sascha Scholz. 
o LOG4J2-1611:  Improved performance of context data injector for web 
applications to be on par with standalone applications. 
o LOG4J2-1591:  Introduced new interface LifeCycle2 with stop(long,TimeUnit) 
method to avoid breaking backwards compatibility with new 
Configurator.shutdown(LoggerContext, long, TimeUnit) API. 
o LOG4J2-1590:  Fixed issue with filters extending AbstractFilter that did not 
override methods with unrolled varargs. 
o LOG4J2-1583:  Fixed scrambled log messages triggered by nested logging from 
toString() method of a logging parameter object. Thanks to Larry West. 
o LOG4J2-1259:  Log4j threads are no longer leaking on Tomcat shutdown. Thanks 
to Misagh Moayyed, Steffen Offermann. 
o LOG4J2-1051:  When starting on Google App Engine, Interpolator now suppresses 
the NoClassDefFoundError stack trace  for the jvmrunargs lookup. Thanks to 
Lukasz Lenart. 
o LOG4J2-1582:  When initializing on platforms where JMX is not available, 
Interpolator component no longer prints stack trace for warning messages. 
o LOG4J2-1581:  Unregistering JMX components no longer prints a stack trace 
when the MBean has already been unregistered. 
o LOG4J2-1313:  Support Property values to be specified in configuration as a 
value attribute as well as an element. Thanks to Philipp Knobel, Leon Finker. 
o LOG4J2-1575:  (GC) LoggerConfig now stores configuration properties in a 
List, not a Map to prevent creating temporary Iterator objects. Added method 
LoggerConfig#getPropertyList(), deprecated method #getProperties(). 
o LOG4J2-1457:  Fixed class loader deadlock when using async logging and 
extended stack trace pattern. Thanks to Leon Finker. 
o LOG4J2-1563:  Fix to prevent Log4j 2.6.2 and higher from losing exceptions 
when a security manager is present. Thanks to Jason Tedor. 
o LOG4J2-1530:  Fixed issue where LogEvent.getContextStack() returned null. 
o LOG4J2-1518:  Prevent deadlock in Async Loggers when queue is full and logged 
Object's toString() logs another message. Thanks to Leon Finker. 
o LOG4J2-1542:  Prevent ArrayIndexOutOfBoundsException in 
ParameterizedMessage.formatTo for single-char or empty messages. Thanks to 
Rogério Lecarião Leite. 
o LOG4J2-1549:  Fixed issue where 
AsyncLoggerContextSelector+PropertiesConfigurationBuilder defaulted to 
includeLocation=true. Thanks to Jason Bedard. 
o LOG4J2-1562:  Prevent SocketAppender memory usage from growing unbounded if 
it cannot connect to a server. 
o LOG4J2-1559:  Prevent NPE in Level.isInRange. Thanks to Andrey Plotkin. 
o LOG4J2-1511:  DynamicThresholdFilter filtered incorrectly when params were 
passed as individual arguments instead of varargs. Thanks to Srikanth 
Surukuntu. 
o LOG4J2-1548:  [CronTriggeringPolicy] ConfigurationScheduler scheduled the 
task infinitely after first fire. 
o LOG4J2-1506:  Log4j should not unregister JMX MBeans when log4j2.disable.jmx 
property is true. Thanks to Johannes Schleger. 
o LOG4J2-1490:  Log4j2 should postpone creating log file until the appender 
actually receives an event. Thanks to Krzysztof Taborski. 
o LOG4J2-1320:  Support loading custom plugins from jar files and directories 
whose classpath entries use the "vfs" URL protocol. Thanks to Paresh Varke, 
Pierrick Hymbert. 
o LOG4J2-1541:  Fix file handle resource leak in 
XmlConfiguration.XmlConfiguration(ConfigurationSource). 
o LOG4J2-1538:  Prevent NPE when dynamically removing filters. Thanks to Igor 
Karpov. 
o LOG4J2-1532:  Attributes were not merged properly in composite 
configurations. 
o LOG4J2-1529:  Attributes were not merged properly in composite 
configurations. Thanks to Sridevi Narra. 
o LOG4J2-1527:  Prevent NPE in RingBufferLogEvent.getFormattedMessage() when 
used in web applications. Thanks to Jose Leon. 
o LOG4J2-905:  Added ability to disable (date) lookup completely for 
compatibility with other libraries like Camel. Thanks to Moritz Löser. 
o LOG4J2-1526:  Added support for setting StatusLogger destination in 
ConfigurationBuilder. 
o LOG4J2-1448:  Allow comma separated agents, host list to be passed to 
FlumeAppender. Thanks to Keith Laban. 
o LOG4J2-1500:  Merging configurations failed with an NPE when comparing Nodes 
with different attributes. Thanks to Jose Leon. 
o LOG4J2-1482:  Fixed improper header in CsvParameterLayout. Thanks to Sumit 
Singhal. 
o LOG4J2-1199:  Documented that JVM Input Arguments Lookup (JMX) is not 
available on Google App Engine. 
o LOG4J2-1438:  (GC) Added method getParameter() to ObjectMessage (and 
ReusableObjectMessage). 
o LOG4J2-1488:  (GC) Fixed ISO8601 %date conversion pattern with a period '.' 
separator for milliseconds is now garbage free. Thanks to Richard Zschech. 
o LOG4J2-1489:  (GC) Fixed %date conversion patterns with a timezone parameter 
are now garbage free. Thanks to Richard Zschech. 
o LOG4J2-1279:  Prevent NullPointerException in 
FastDateParser$TimeZoneStrategy. Thanks to Tony Baines. 
o LOG4J2-1341:  (GC) HighlightConverter and StyleConverter are now GC-free. 
Thanks to Richard Zschech. 
o LOG4J2-1467:  [OSGi] Fixed missing import package. Thanks to Ralf, Gary 
Gregory. 
o LOG4J2-351:  [OSGi] Fixed wrong Fragment-Host in manifest files. Thanks to 
Roland Weiglhofer. 
o LOG4J2-1313:  Properties declared in configuration can now have their value 
either in the element body or in an attribute named "value". Thanks to Philipp 
Knobel. 
o LOG4J2-1235:  org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy 
was not working correctly. Thanks to Niranjan Rao, Sascha Scholz, Aleksey 
Zvolinsky. 
o LOG4J2-1502:  Fixed issue where CsvParameterLayout and CsvLogEventLayout 
inserted NUL characters if data starts with {, (, [ or " Thanks to Sumit 
Singhal. 
o LOG4J2-1573:  Layout is no longer optional. Thanks to Steffen Offermann. 
o LOG4J2-1608:  ServletAppender does not provide throwable object to 
ServletContext. 
o LOG4J2-1599:  Prevent potential NPE in 
org.apache.logging.log4j.message.ParameterFormatter.formatMessage3(StringBuilder,
 char[], int, Object[], int, int[]). 
o LOG4J2-1600:  Prevent potential NPE due to 
org.apache.logging.log4j.core.layout.MarkerPatternSelector.createSelector(PatternMatch[],
 String, boolean, boolean, Configuration). 
o LOG4J2-1601:  Prevent potential NPE due to 
org.apache.logging.log4j.core.layout.ScriptPatternSelector.createSelector(AbstractScript,
 PatternMatch[], String, boolean, boolean, Configuration). 
o LOG4J2-1602:  Prevent potential NPE in 
org.apache.logging.log4j.core.util.datetime.FormatCache.MultipartKey.equals(Object)
 when object is null. 
o LOG4J2-1603:  Redo hashCode() and equals() methods in 
org.apache.logging.log4j.core.net.ssl classes. 
o LOG4J2-1610:  Add targetNamespace to log4j-config.xsd. GitHub #43. Thanks to 
Shubhankar. 
o LOG4J2-1619:  new Log4jLogEvent().toString() throws an NPE. 

Changes:
o LOG4J2-1604:  Log4j2 TcpSocketServer in background. Thanks to Colin Hillman. 
o LOG4J2-1574:  Allow the RollingFileAppender to use default pattern layout. 
o LOG4J2-1556:  Custom Log4j threads now extend Log4jThread. 
o LOG4J2-1605:  Improve error messages for TcpSocketServer and UdpSocketServer. 
o LOG4J2-1458:  Updated Jackson from 2.7.5 to 2.8.0. 
o LOG4J2-1494:  Updated Jackson from 2.8.0 to 2.8.1. 
o LOG4J2-1569:  Updated Jackson from 2.8.1 to 2.8.2. 
o LOG4J2-1598:  Updated Jackson from 2.8.2 to 2.8.3. 
o LOG4J2-1495:  Updated LMAX Disruptor from 3.3.4 to 3.3.5. 
o LOG4J2-1496:  Updated Kafka client from 0.9.1.0 to 0.10.0.0. 
o LOG4J2-1533:  Updated Kafka client from 0.10.0.0 to 0.10.0.1. 
o LOG4J2-1487:  Updated JMS test from ActiveMQ 5.13.3 to 5.13.4. 
o LOG4J2-1551:  Updated JMS test from ActiveMQ 5.13.4 to 5.14.0. 
o LOG4J2-1543:  Removed deprecated Core API 
org.apache.logging.log4j.core.util.Constants.UTF_8. 
o LOG4J2-1544:  Removed deprecated Core API 
org.apache.logging.log4j.core.util.Assert.requireNonNull(T, String). 
o LOG4J2-1545:  Removed deprecated Web API 
org.apache.logging.log4j.web.WebLookup.getServletContext(). 


Apache Log4j 2.7 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:

http://logging.apache.org/log4j/2.x/

Reply via email to