The Apache Log4j 2 team is pleased to announce the Log4j 2.1 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 of the improvements available in Logback while fixing some inherent problems in Logback's architecture. This is the fourth GA release which contains several bugfixes and new features. There are two new Maven artifacts in this release: log4j-jul and log4j-iostreams. Both components are API-based with optional Core features. GA Release 2.1 Changes in this version include: New features: o LOG4J2-868: Add ShutdownCallbackRegistry interface for customizable shutdown callback handling. This is particularly useful for application servers that wish to integrate with Log4j 2. o LOG4J2-589: Supported filtering on custom log levels in configuration. o LOG4J2-856: Documentation: add sections on the JUL Adapter, IO Streams and NoSQL Appenders to the Maven and Ivy page. o LOG4J2-848: Add a Java lookup to provide nicely formatted runtime version information. o LOG4J2-809: Move reflection utility class to API's private utility classes. o LOG4J2-833: Documentation: added Runtime Dependencies link to left nav-bar on site. o LOG4J2-816: Documentation: added section on XInclude to user manual Configuration page. o LOG4J2-547: Add the Log4j IOStreams component. o LOG4J2-431: Added Memory-Mapped File Appender. Thanks to Claude Mamo. o LOG4J2-827: Support use of TypeConverter classes through the standard Plugin system. o LOG4J2-825: Add simple validation constraint annotations for the Plugin system. o LOG4J2-428: Implement a GELF layout. Thanks to Mark Paluch. o LOG4J2-608: Add java.util.logging implementation based on log4j-api. See log4j-jul documentation for more details. o LOG4J2-793: Add support for custom SLF4J Markers in log4j-slf4j-impl module. o LOG4J2-771: Add lookup for application main arguments. o LOG4J2-787: Add lookup for JVM arguments. Fixed Bugs: o LOG4J2-676: Some typo fixes and enhancements for the site. Thanks to Stefan Bodewig. o LOG4J2-866: Documentation: fixed missing closing parenthesis in code example. Thanks to Gerard Weatherby. o LOG4J2-862: Fixed classloader issue that prevented Log4j from finding the implementation when used in a custom Ant task. Thanks to Michael Sutherland. o LOG4J2-861: Documentation: fix broken links on left navigation Extending Log4j Configuration sub-menu. o LOG4J2-797: Documentation: clarified why log4j-core is a compile time dependency in Maven and Ivy page. Thanks to Andreas Rytina. o LOG4J2-855: Documentation: fix broken links on Appenders manual page. o LOG4J2-807: Prevent NPE when configuration with AsyncLogger/AsyncRoot is reloaded. o LOG4J2-678: Documentation: fixed minor issues with Log4j2 web site/documentation. Thanks to Matt Sicker. o LOG4J2-843: Migrate JpaHyperSqlAppenderTest JUnit performance test to log4j-perf. o LOG4J2-842: Migrate JpaH2AppenderTest JUnit performance test to log4j-perf. o LOG4J2-841: Migrate JdbcHyperSqlAppenderTest JUnit performance test to log4j-perf. o LOG4J2-840: Migrate JdbcH2AppenderTest JUnit performance test to log4j-perf. o LOG4J2-830: Respect external interrupt signal to allow application shutdown after joining AsyncAppender thread. o LOG4J2-813: MarkerManager Log4jMarker.hasParents() returns opposite of correct result. Thanks to David Erichsen, Brandon Barry. o LOG4J2-785: Documentation: fixed capitalization inconsistency in user manual example config. o LOG4J2-829: Fixed issue in RollingFile filePattern: backslashes are path separators, not escape characters. o LOG4J2-832: ThrowableProxy fails if a class in logged stack trace throws java.lang.Error from initializer Thanks to Seth Leger. o LOG4J2-745: Avoid ConverterKey plugin clashes by using a more predictable plugin loading infrastructure. Plugins have been segmented into three parts: class path, user-specified packages, and OSGi bundles. Thanks to Scott Harrington. o LOG4J2-798: Fixed plugin scanning redundancy causing massive slowdowns in certain environments. Thanks to Scott Harrington. o LOG4J2-753: Reduced CachedClock thread contention. o LOG4J2-819: Fixed memory leak in Tomcat 6 caused by clock background threads unintentionally started by Tomcat after web application stop. Thanks to Gary Gregory. o LOG4J2-391: FlumePersistentManager now handles LockConflictExceptions in Berkeley Db when sending a batch. Thanks to Kamal Bahadur. o LOG4J2-782: Remove invalid Oracle Maven repository. o LOG4J2-796: Fixed issue where log4j-to-slf4j did not work correctly with SLF4J Simple Logger. o LOG4J2-811: SimpleLogger throws ArrayIndexOutOfBoundsException for an empty array. Thanks to Yogesh Rao. o LOG4J2-663: Fix OSGi Import-Package problem with the JMS API. Thanks to Florian Brunner. o LOG4J2-783: PatternLayout should use platform character encoding by default, not UTF-8. Thanks to Minglei Lee. Changes: o LOG4J2-845: Add 2.1.0 to compatible versions in Log4j API ProviderUtil and update Log4jAPIVersion to 2.1.0 in core META-INF/log4j-provider.properties. o LOG4J2-844: Update JMH to 1.1 from 0.7.2. o LOG4J2-831: Documentation: updated FAQ "which jars" diagrams for JUL bridge and 2.1 version. o LOG4J2-780: Update Spring Framework to 3.2.11.RELEASE from 3.2.8.RELEASE. o LOG4J2-815: Unify the two JMS appenders into a single appender. Configurations written for 2.0 will still work in 2.1+. o LOG4J2-790: Update Jackson to 2.4.2 from 2.4.1 (for XML and JSON processing). o LOG4J2-766: Incomplete documentation for JSONLayout. Thanks to Bruno P. Kinoshita. o LOG4J2-800: All life cycle implementations should be serializable. This is still work in progress. o LOG4J2-801: org.apache.logging.log4j.core.Logger should be serializable. This is still work in progress. o LOG4J2-810: Update javax.mail to 1.5.2 from 1.5.0. o LOG4J2-822: Update org.eclipse.persistence.jpa to 2.5.2 from 2.5.1. o LOG4J2-867: FlumeAppender: maxDelay not in seconds, but milliseconds. Add time scale to some settings, for example maxDelayMillis instead of maxDelay. The old names are aliased for compatibility. Apache Log4j 2.1 requires a minimum of Java 6 to build and run. 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/ <http://logging.apache.org/log4j/2.x/>