
              Apache Log4j 2.4 RELEASE NOTES

The Apache Log4j 2 team is pleased to announce the Log4j 2.4 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, property substitution using Lookups, and asynchronous
Loggers. In addition, Log4j 2 will not lose events while reconfiguring.

This is the eighth GA release. It contains several bugfixes and new features. As of this release
Log4j now requires a minimum of Java 7.

GA Release 2.4

Changes in this version include:

New features:
o LOG4J2-635:  Add support for configuration via Properties. 
o LOG4J2-952:  Add ConfigurationBuilder. 
o LOG4J2-599:  Added support for Java 8 lambda expressions to lazily construct a log message only if
              the requested log level is enabled. 
o LOG4J2-1118:  Updated Logger wrapper generator tool to add Java 8 lambda support for custom log levels. 
o LOG4J2-1107:  New Appender for Apache Kafka. Thanks to Mikael Ståldal. 
o LOG4J2-1113:  New publisher Appender for ZeroMQ (using JeroMQ). Thanks to Gary Gregory. 
o LOG4J2-1088:  Add Comma Separated Value (CSV) layouts for parameter and event logging. Thanks to Gary Gregory. 
o LOG4J2-1090:  Add Core Configurator APIs to change a logger's level. 
o LOG4J2-1105:  Add API org.apache.logging.log4j.Level.isInRange(Level, Level). Thanks to Gary Gregory. 
o LOG4J2-1106:  Add a LevelRangeFilter class. Thanks to Gary Gregory. 
o LOG4J2-1076:  Added support for system nanosecond time in pattern layout. 
o LOG4J2-1075:  Added support for compressing to bzip2 format on file rollover. 
o LOG4J2-1077:  Support additional Apache Commons Compress compression formats on rollover: Deflate, Pack200, XY. 
o LOG4J2-767:  New module for Liquibase integration. Thanks to Mikael Ståldal. 
o LOG4J2-1023:  New RewritePolicy for changing level of a log event. Thanks to Mikael Ståldal. 
o LOG4J2-1015:  Add a way to route messages based on the %marker in Layout for RoutingAppender. Thanks to Daniel Marcotte. 
o LOG4J2-1050:  Add a Log4jLookup class to help write log files relative to log4j2.xml. Thanks to Adam Retter. 
o LOG4J2-1057:  Add API org.apache.logging.log4j.LogManager.getFormatterLogger(). 
o LOG4J2-1066:  Expose Log4jContextFactory's ShutdownCallbackRegistry. Thanks to Charles Allen. 

Fixed Bugs:
o LOG4J2-1121:  Fixed potential race condition on reconfiguration. Introduced ReliabilityStrategy to facilitate
        switching between different mechanisms for preventing log events from being dropped on reconfiguration. 
o LOG4J2-1123:  Core Configurator.initialize(String, ClassLoader, String) fails to work when config location is a file path. Thanks to Gary Gregory. 
o LOG4J2-1117:  OutputStreamManager in ConsoleAppender leaking managers. Thanks to Marcus Thiesen. 
o LOG4J2-1044:  Write pending events to Flume when the appender is stopped. 
o LOG4J2-1108:  NullPointerException when passing null to java.util.logging.Logger.setLevel(). Thanks to Mikael Ståldal. 
o LOG4J2-1110:  org.apache.logging.log4j.jul.CoreLogger.setLevel() checks for security permission too late. 
o LOG4J2-1084:  Misleading StatusLogger WARN event in LogManager with java.util.Map. Thanks to Philipp Schneider. 
o LOG4J2-1051:  NoClassDefFoundError when starting app on Google App Engine. Thanks to Lukasz Lenart. 
o LOG4J2-684:  ExtendedThrowablePatternConverter does not print suppressed exceptions. Thanks to Joern Huxhorn, Mauro Molinari. 
o LOG4J2-1069:  Improper handling of JSON escape chars when deserializing JSON log events. Thanks to Sam Braam. 
o LOG4J2-1068:  Exceptions not logged when using TcpSocketServer + SerializedLayout. Thanks to Andy McMullan. 
o LOG4J2-1067:  ThrowableProxy getExtendedStackTraceAsString throws NPE on deserialized nested exceptions. Thanks to Sam Braam. 
o LOG4J2-1049:  AsyncAppender now resets the thread interrupted flag after catching InterruptedException. Thanks to Robert Schaft. 
o LOG4J2-1048:  FileConfigurationMonitor unnecessarily calls System.currentTimeMillis() causing high CPU usage. Thanks to Nikhil. 
o LOG4J2-1037:  Backward compatibility issue in log4j-1.2-api NDC pop() and peek(). Thanks to Marc Dergacz. 
o LOG4J2-1025:  Custom java.util.logging.Level gives null Log4j Level and causes NPE. Thanks to Mikael Ståldal. 
o LOG4J2-1033:  SimpleLogger creates unnecessary Map objects by calling ThreadContext.getContext() instead of getImmutableContext(). Thanks to Mikael Ståldal. 
o LOG4J2-1026:  HighlightConverter does not obey noConsoleNoAnsi. 
o LOG4J2-1019:  ZipCompressAction leaves files open until GC when an IO error takes place. 
o LOG4J2-1020:  GzCompressAction leaves files open until GC when an IO error takes place. 
o LOG4J2-1038:  Incorrect documentation for layout default charset. Thanks to Gili. 
o LOG4J2-1042:  Socket and Syslog appenders don't take timeout into account at startup. Thanks to Guillaume Turri. 
o LOG4J2-934:  Circular suppressed Exception throws StackOverflowError. Thanks to Kenneth Gendron. 
o LOG4J2-1046:  Circular Exception cause throws StackOverflowError. Thanks to Kenneth Gendron. 
o LOG4J2-982:  Use System.nanoTime() to measure time intervals. Thanks to Mikhail Mazurskiy. 
o LOG4J2-1045:  Externalize log4j2.xml via URL resource. Thanks to Günter Albrecht. 
o LOG4J2-1058:  Log4jMarker#contains(String) does not respect org.slf4j.Marker contract. Thanks to Daniel Branzea. 
o LOG4J2-1060:  Log4jMarker#contains(Marker) does not respect org.slf4j.Marker contract. 
o LOG4J2-1061:  Log4jMarker#remove(Marker) does not respect org.slf4j.Marker contract. 
o LOG4J2-1062:  Log4jMarker#add(Marker) does not respect org.slf4j.Marker contract. 
o LOG4J2-1064:  org.apache.logging.slf4j.Log4jMarker does not implement org.slf4j.Marker.equals(Object) org.slf4j.Marker.hashCode(). 
o LOG4J2-889:  Header in layout should not be written on application startup if appending to an existing file. Fixes LOG4J2-1030. Thanks to Maciej Karaś, Kenneth Leider. 
o LOG4J2-918:  Clarify documentation for combining async with sync loggers. 
o LOG4J2-1078:  GelfLayout throws exception if some log event fields are null. Thanks to Mikael Ståldal. 

Changes:
o LOG4J2-1017:  Update Java platform from Java 6 to 7. From this version onwards, log4j 2 requires Java 7. 
o LOG4J2-812:  PatternLayout timestamp formatting performance improvement: replaced synchronized SimpleDateFormat with
        Apache Commons FastDateFormat. This and better caching resulted in a ~3-30X faster timestamp formatting. 
o LOG4J2-1097:  PatternLayout timestamp formatting performance improvement: predefined date formats (and variants using
        a period '.' millisecond separator instead of ',') are now formatted ~2-10X faster than other date formats. 
o LOG4J2-1096:  Improved performance of ParameterizedMessage::getFormattedMessage by ~2X. 
o LOG4J2-1120:  LoggerConfig performance improvements: avoid unnecessary lock acquisition, use more efficient data structure. 
o LOG4J2-1125:  PatternLayout performance improvement by caching and reusing a ThreadLocal StringBuilder. 
o LOG4J2-1114:  Add thread name to status logger layout. 
o LOG4J2-1010:  Pass log event when interpolating logger properties. 
o LOG4J2-1044:  Support batchSize in FlumeAvroManager. 
o LOG4J2-1065:  Define org.apache.logging.log4j.Marker.equals(Object) and org.apache.logging.log4j.Marker.hashCode(). 
o LOG4J2-1063:  Avoid creating temporary array object in org.apache.logging.slf4j.Log4jMarker.iterator(). 
o LOG4J2-890:  log4j-web-2.1 should workaround a bug in JBOSS EAP 6.2. Thanks to Hassan Kalaldeh, Robert Andersson, Remko Popma. 
o LOG4J2-403:  MongoDB appender, username and password should be optional. Thanks to Poorna Subhash P, Jeremy Lautman. 
o LOG4J2-1035:  Log4j2 tries to SystemClassLoader when running on Google AppEngine. 
o LOG4J2-1022:  Allow a list of keys to be specified in the MDC pattern converter. 
o LOG4J2-959:  Fix FindBugs DM_DEFAULT_ENCODING bug in SimpleLogger.logMessage() and simplify code. 
o LOG4J2-1036:  Update Apache Flume from 1.5.2 to 1.6.0. 
o LOG4J2-1041:  Update MongoDB driver from 2.11.2 to 2.13.2. 
o LOG4J2-1018:  Update database tests from H2 1.3.175 to 1.3.176. 
o LOG4J2-1070:  Update Java Mail from 1.5.2 to 1.5.4. 
o LOG4J2-1079:  Update Jackson from 2.5.3 to 2.5.4. 
o LOG4J2-1879:  Update Jackson from 2.5.4 to 2.6.0. 
o LOG4J2-1092:  Update Jackson from 2.6.0 to 2.6.1. 
o LOG4J2-1104:  Update Apache Commons Compress from 1.9 to 1.10. 

Removed:
o Removed experimental interface LevelLogger which got committed to master by mistake. 

Apache Log4j 2.4 requires a minimum of Java 7 to build and run. Log4j 2.4 and greater requires Java 7,
version 2.3 required 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/