2.14.0 (2020-11-06)

This release contains a new Layout, JsonTemplateLayout, that is intended to ultimately replace JsonLayout. As its name suggests it uses a template to define the elements to include in the JSON. This Layout was contributed by the author of the log4j2-logstash-layout, and who is now a member of the Log4j community.

Log4j 2.14.0 adds support for MongoDB 4 and removes support for MongoDB 2.

This release also contains a number of bug fixes which are listed below.

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.

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

Log4j 2.14.0 requires a minimum of Java 8 to build and run. Log4j 2.12.1 is the last release to support Java 7.

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.



  • Create module log4j-mongodb4 to use new major version 4 MongoDB driver. (for LOG4J2-2848 by Gary Gregory)

  • More flexible configuration of the Disruptor WaitStrategy. (for LOG4J2-2858 by Carter Kozak, Stepan Gorban)

  • Add JsonTemplateLayout. (for LOG4J2-2957 by Volkan Yazıcı)


  • Add date pattern support for HTML layout. (for LOG4J2-2889 by Matt Sicker, Geng Yuanzhe)

  • Allow GelfLayout to produce newline delimited events. (for LOG4J2-2892 by Ralph Goers, Jakub Lukes)

  • Update MongoDB tests to require Java 8 unconditionally now that Log4j requires Java 8. (for by Gary Gregory)

  • Update com.fasterxml.jackson.* 2.10.2 → 2.11.0. (for by Gary Gregory)

  • Update jackson 2.11.0 → 2.11.2. (for by Gary Gregory)

  • Update mongodb3.version from 3.12.1 to 3.12.6. (for by Gary Gregory)

  • Update org.apache.activemq:activemq-broker 5.15.11 → 5.16.0. (for by Gary Gregory)

  • Update org.apache.commons:commons-compress 1.19 → 1.20. (for by Gary Gregory)

  • Update org.apache.commons:commons-csv 1.7 → 1.8. (for by Gary Gregory)

  • Update org.apache.commons:commons-lang3 3.9 → 3.10. (for by Gary Gregory)

  • Update org.codehaus.groovy:* 2.5.6 → 3.0.5. (for by Gary Gregory)

  • Update tests commons-io:commons-io 2.6 → 2.7. (for by Gary Gregory)

  • Update tests hsqldb 2.5.0 → 2.5.1. (for by Gary Gregory)

  • Update tests junit:junit 4.12 → 4.13. (for by Gary Gregory)


  • Drop log4j-mongodb2 module. (for LOG4J2-2851 by Gary Gregory)


  • Javadoc link in ThreadContext description was incorrect. (for LOG4J2-2822 by Ralph Goers)

  • Correct class name printed in error message in RollingFileAppender. (for LOG4J2-2832 by Ralph Goers, Benjamin Asbach)

  • Disruptor and JUL no longer recursively start the AsyncLoggerDisruptor resulting in an extra disruptor background thread constantly waiting. (for LOG4J2-2837 by Carter Kozak)

  • Null pointer exception when no network interfaces are available. (for LOG4J2-2844 by Gary Gregory)

  • Fixed typos where mergeFactory should be mergeStrategy. (for LOG4J2-2859 by Ralph Goers, Yanming Zhou)

  • Obtain ContextDataProviders asynchronously. (for LOG4J2-2867 by Ralph Goers)

  • RingBufferLogEventTranslator uses a static ContextDataInjector instead of initializing a new object on each thread. (for LOG4J2-2867 by Carter Kozak)

  • Rollover was failing to create directories when using a DirectFileRolloverStrategy. (for LOG4J2-2875 by Ralph Goers)

  • Determine the container id to obtain container and image information. (for LOG4J2-2877 by Ralph Goers)

  • Create StackWalker benchmark. Revert back to StackWalker.walk based on benchmark results. (for LOG4J2-2880 by Ralph Goers)

  • Support java.util.logging filters when using that API. (for LOG4J2-2882 by Ralph Goers, Emmanuel Bourg)

  • When using DirectFileRolloverStrategy the file pattern was not being recalculated on size based rollover after a time based rollover had occurred. (for LOG4J2-2883 by Ralph Goers)

  • Fix spelling error in log message. (for LOG4J2-2894 by Ralph Goers)

  • Fix potential deadlock in asynchronous logging by avoiding blocking for queue space on Log4jThreads (for LOG4J2-2895 by Carter Kozak)

  • Avoid initializing volatile fields with default values. (for LOG4J2-2898 by Carter Kozak, Turbanov Andrey)

  • Fix log4j-1.2-api LogEventWrapper threadId and priority accessors when called multiple times. (for LOG4J2-2899 by Carter Kozak)

  • Missing configuration files should be ignored when creating a composite configuration. (for LOG4J2-2901 by Ralph Goers)

  • Fix UnsupportedOperationException when initializing the Log4j2CloudConfigLoggingSystem. (for LOG4J2-2906 by Ralph Goers, Stephen Joyner)

  • Move Spring Lookup and Spring PropertySource to its own module. (for LOG4J2-2908 by Ralph Goers)

  • Log4j-web should now store the servlet context as a map entry instead of in the single external context field. (for LOG4J2-2910 by Ralph Goers)

  • Log4j2EventListener in spring.cloud.config.client listens for wrong event. (for LOG4J2-2911 by Ralph Goers)

  • Call ReliabilityStrategy’s beforeStopAppenders() method before stopping AsyncAppender. (for LOG4J2-2919 by Matt Sicker, Geng Yuanzhe)

  • Fix broken link in FAQ. (for LOG4J2-2925 by Ralph Goers)

  • Fix NPE in MDCContextMap on 'contains' and 'isEmpty' invocations. (for LOG4J2-2939 by Carter Kozak, Constantin Hirsch)

  • Prevent premature garbage collection of shutdown hooks in DefaultShutdownCallbackRegistry. (for LOG4J2-2954 by Carter Kozak, Henry Tung)