2.12.0
- Release date
-
2019-06-23
This release contains bugfixes and minor enhancements.
Due to a break in compatibility in the SLF4J binding, Log4j now ships with two versions of the SLF4J to Log4j adapters.
log4j-slf4j-impl
should be used with SLF4J 1.7.x and earlier and log4j-slf4j18-impl
should be used with SLF4J 1.8.x and later.
New features include support for reconfiguration of Log4j configuraton files accessed via HTTP(s) and Spring Cloud Config specifically, a new Docker Lookup for obtaining information about the current Docker container, new reconfiguration methods added to the Configurator class, the ability to pad integers with leading zeros in filenames generated by the rolling file appenders, and allowing the TCP SocketAppender
to connect to multiple IP addresses when they are returned from DNS.
More details on the new features and fixes are itemized below.
Note that the XML, JSON and YAML formats changed in the 2.11.0 release: they no longer have the timeMillis
attribute and instead have an Instant
element with epochSecond
and nanoOfSecond
attributes.
The Log4j 2.12.0 API, as well as many core components, maintains binary compatibility with previous releases.
Log4j 2.12.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 Log4j 2 website.
Added
-
Allow custom end-of-line with JsonLayout. (LOG4J2-2337)
-
Allow zero padding the counter of a RollingFileAppender. (LOG4J2-2403)
-
Add reconfiguration methods to Configurator. (LOG4J2-2406)
-
Add filter that will match events when no marker is present. (LOG4J2-2427)
-
TCP Appender should support a host name resolving to multiple IP addresses. (LOG4J2-2586)
-
GZIP compression on rollover supports configurable compression levels. (LOG4J2-2598)
-
AsyncQueueFullPolicy configuration short values "Default" and "Discard" are case-insensitive to avoid confusion. (LOG4J2-2611)
-
Add and use method org.apache.logging.log4j.message.MapMessage.toKey(String) for simpler subclasses. (LOG4J2-2634)
-
Add support for reconfiguration via HTTP(S), Docker, and Spring Cloud Configuration. (LOG4J2-913)
Changed
-
Update Jackson from 2.9.7 to 2.9.8. (LOG4J2-2570)
-
Update MongoDB 3 module driver from 3.9.0 to 3.10.1. (LOG4J2-2574)
-
Update Jackson from 2.9.8 to 2.9.9. (LOG4J2-2619)
-
Refactor several AsyncLogger methods below the 35 byte threshold for inlining. (LOG4J2-2634)
-
Update tests from H2 1.4.197 to 1.4.199.
Fixed
-
FailoverAppender was failing with ERROR appender Failover has no parameter that matches element Failovers. (LOG4J2-1103)
-
Lookups were not found if the plugin key was not lower case. (LOG4J2-1143)
-
Locate plugins within a Jar using a URL Connection. (LOG4J2-1852)
-
RollingRandomAccessFileAppender error message referenced incorrect class name. (LOG4J2-2547)
-
NullPointerException in JdbcAppender.createAppender(). (LOG4J2-2559)
-
JEP223 version detection fix for JDK 9 and up. (LOG4J2-2561)
-
MapPatternConverter is properly created from the '%K', '%map', and '%MAP' patterns. PatternConverter instanceOf methods with unknown parameter types no longer elide those with known parameters. (LOG4J2-2564)
-
StackOverflowException when server not reachable with SocketAppender. (LOG4J2-2592)
-
Throw better exception message when both log4j-slf4j-impl and log4j-to-slf4j are present. (LOG4J2-2597)
-
java.lang.StackOverflowError at org.apache.logging.log4j.junit.AbstractExternalFileCleaner.println(AbstractExternalFileCleaner.java:169). (LOG4J2-2598)
-
Update file time when size based triggering policy is used without a time-based triggering policy. (LOG4J2-2602)
-
Asynchronous logging when the queue is full no longer results in heavy CPU utilization and low throughput. (LOG4J2-2606)
-
Explicitly set file creation time. (LOG4J2-2610)
-
NullPointerException at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:803). (LOG4J2-2612)
-
Restore constructor to ThrowablePatternConverter that was removed in 2.8.2. (LOG4J2-2616)
-
Possible ClassCastException in org.apache.logging.log4j.core.script.ScriptManager.ScriptManager(Configuration, WatchManager) (LOG4J2-2618)
-
StructuredDataId was ignoring maxLength attribute. (LOG4J2-2622)
-
Fix a race allowing events not to be recorded when a RoutingAppender purge policy attempts to delete an idle appender at exactly the same time as a new event is recorded. (LOG4J2-2629)
-
RoutingAppender PurgePolicy implementations no longer stop appenders referenced from the logger configuration, only those that have been created by the RoutingAppender. Note that RoutingAppender.getAppenders no longer includes entries for referenced appenders, only those which it has created. (LOG4J2-2631)
-
RFC5424Layout was not properly setting default Structured Element id for the MDC (LOG4J2-2636)