Skip to content

2.21.0

Compare
Choose a tag to compare
@grobmeier grobmeier released this 16 Oct 19:59
· 1199 commits to 2.x since this release
3333493

This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
It will be the first release built and signed by the CI using the ASF Logging Services Release Manager GPG key,
which is shared in KEYS.

The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.

Apache Log4j 2.21.0 requires Java 8 to run.
The build requires JDK 11 and generates reproducible binaries.

For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see the Apache Log4j 2 website.

OSGi changes

All the published artifacts are OSGi bundles or fragments.

This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens - present in the bundle names of previous releases were replaced by dots ..

JPMS changes

All the published artifacts have been migrated from automatic modules to named JPMS modules.
All packages marked as private in the Javadoc are not exported.

The module name of four bridges (log4j-slf4j-impl, log4j-slf4j2-impl, log4j-to-jul and log4j-to-slf4j) have been changed to adhere to the same convention as the OSGi bundle names.

Added

Changed

  • Open FileExtension methods to allow their usage in custom RolloverStrategys (#1365, #1683)
  • Bumped the minimum Java version required for the build to JDK 11. Runtime requirements remain unchanged. (#1369)
  • Set the default minLevel and maxLevel of LevelRangeFilter to OFF and ALL, respectively (#1503)
  • Removed additional isFiltered checks in AsyncLoggerConfig (#1550)
  • Use Java version-specific warnings in StackLocator (#1760)
  • Started logging a status error event instead of an NPE in OsgiServiceLocator.loadServices(Class, Lookup, boolean) when a bundle has no valid BundleContext for a service type
  • Implemented a CI-based release process
  • Update Eclipse Angus Activation to version 2.0.1 (#1591)
  • Update Eclipse Angus Mail to version 2.0.2 (#1591)
  • Update com.datastax.cassandra:cassandra-driver-core to version 3.11.5 (#1591)
  • Update Apache Cassandra to version 3.11.16 (#1591)
  • Update Apache Commons Compress to version 1.24.0 (#1591)
  • Update Apache Commons CSV to version 1.10.0 (#1591)
  • Update Jackson to version 2.15.2 (#1591)
  • Update Jakarta Activation API to version 2.1.2 (#1591)
  • Update Jakarta Mail API to version 2.1.2 (#1591)
  • Update JCTools to version 4.0.1 (#1591)
  • Update Apache Kafka to version 3.4.0 (#1591)
  • Update Kubernetes client to version 5.12.4 (#1591)
  • Update org.mongodb:mongodb-driver-core to version 4.10.2 (#1591)
  • Update io.netty:netty-bom to version 4.1.97 (#1591)
  • Update Spring Boot to version 2.7.15 (#1591)
  • Update Spring Framework to version 5.3.29 (#1591)
  • Update Tomcat JULI to version 10.0.27 (#1591)
  • Update Woodstox to version 6.5.1 (#1591)

Removed

Fixed

  • Added validation to rolling file manager path conditions (#1231)
  • Adapted the OSGi metadata of log4j-to-slf4j to work with SLF4J 1 and 2. To achieve that used a version range of [1.7,3) for the imported SLF4J packages. (#1232)
  • Fixed Javadoc failures (#1275, #1753)
  • Removed locale-dependent toLowerCase/toUpperCase calls (#1281)
  • Redirected old /<module>/apidocs URLs (broken in 2.20.0) to /javadoc/<module> (#1284)
  • Added environment variable arbiter (#1312)
  • Fixed logging of java.sql.Date objects by appending it before Log4J tries to call java.util.Date.toInstant() on it (#1366)
  • Adapted the OSGi metadata of log4j-api, log4j-core, log4j-slf4j-impl and log4j-slf4j2-impl to activate the bundle when it is accessed. To achieve that set the Bundle-ActivationPolicy to lazy for the log4j bundles. (#1367)
  • Avoided using released objects in StackTraceStringResolver of JsonTemplateLayout (#1380)
  • Added missing setter for connectionStringSource in MongoDb4Provider builder (#1389)
  • Fixed NPE in PluginElementVisitor (#1391)
  • Added columnType as alias for the column mapping type attribute (#1405)
  • Restored Log4jMarker visibility in SLF4J adapters (#1414)
  • Fixed buffer size in Log4jFixedFormatter date time formatter (#1418)
  • Fixed the propagation of synchronous action failures in RollingFileManager and FileRenameAction (#1445, #1549)
  • Fixed RollingFileManager to propagate failed synchronous actions correctly (#1445)
  • Replaced the usage of System.out in StackLocator for warnings with System.err (#1484)
  • Fixed concurrent date-time formatting issue in PatternLayout (#1485)
  • Fixed runtime dependencies documentation (#1530)
  • Allowed to override FQCN in Log4jEventBuilder by implementing CallerBoundaryAware (#1533)
  • Migrated MongoDB tests to JUnit 5 and Flapdoodle Embedded MongoDB 4 (#1589)
  • Rewrote message parameter formatter with improved escape handling (#1626)
  • Improved formatting and serialization of StackTraceElement on JDK 9+ (#1640)
  • Fixed MemoryMappedFileAppender buffer unmapping on JRE 9+ (#1646)
  • Fixed rollover strategy in the Log4j 1.x compatibility layer (#1650)
  • Removed incorrect mention of base64 lookup and improve the rest of the lookup manual (#1681, LOG4J2-3504)
  • Implemented LocationAware for JsonTemplateLayout, since this was causing location not being passed to underlying appenders (#1692)
  • Added support for long values in MongoDb 4 appender to configure collectionSize (#1747)
  • Only shutdown Log4j after last Log4jServletContextListener is executed (#1782)
  • Allowed using Spring Arbiter without a Spring environment (#1783)
  • Fixed context data loss if <AsyncLogger> components are used with an all async logger context (#1786)
  • Fixed JsonTemplateLayout NPE thrown on custom log levels (#1805)
  • Improved Log4j-config.xsd schema LOG4J2-170
  • Fixed NPE in ContextSelector (LOG4J2-3217, #1538)
  • Avoided allocating ThreadLocals in AbstractLogger when they are disabled, since this was causing memory leaks due to retained reference to class loaders in web applications LOG4J2-3657
  • Fixed %notEmpty directive of PatternLayout for empty MDC/NDC inputs LOG4J2-3660
  • Fixed file descriptor leak on Tomcat LOG4J2-3663
  • Ensured FileOutputStream is closed in CommonsCompressAction.execute()