Apache Log4j team is pleased to announce the `2.24.0`
release. Apache Log4j is a versatile, industrial-strength
Java logging framework composed of an API, its implementation,
and components to assist the deployment for various use cases.
For further information (support, download, etc.) see the project
website[1].
[1] https://logging.apache.org/log4j/2.x/index.html
== Release Notes
The `2.24.0` version of Log4j API has been enhanced with changes from
the 3.x branch and will be used by both Log4j 2 Core and Log4j 3 Core
releases.
The changes include:
* A faster default `ThreadContextMap`.
* Enhanced GraalVM support: native binaries that use Log4j API will no
longer require additional GraalVM configuration.
* The configuration properties subsystem now only accepts the official
pre-2.10 property names and the normalized post-2.10 names.
Check your configuration for typos.
=== Documentation
The Apache Log4j 2[1] website has been almost entirely rewritten to
provide improved documentation and faster access to the information
you need.
[1] https://logging.staged.apache.org/log4j/2.24.0/index.html
<https://logging.staged.apache.org/log4j/2.24.0/index.html>
=== Bridges
The JUL-to-Log4j API and Log4j 1-to-Log4j API will no longer be able
to modify the configuration of Log4j Core by default.
If such a functionality is required, it must be explicitly enabled.
=== Modules
The following Log4j Core additional modules have been removed:
`log4j-flume-ng`::
The module is no longer part of the release process and will follow
its own release lifecycle.
Please manage your dependencies using `log4j-bom`[2] to always use its
latest version.
`log4j-kubernetes`::
The module has been moved to the Fabric8.io Kubernetes project[3] and
follows the Fabric8.io release lifecycle.
`log4j-mongodb3`::
The module based on MongoDB Java client version 3.x has been removed.
Please migrate to `log4j-mongodb`[4] (client version 5.x) or
`log4j-mongodb4`[5] (client version 4.x).
[2] https://logging.apache.org/log4j/2.x/components.html#log4j-bom
<https://logging.apache.org/log4j/2.24.0/components.html#log4j-bom>
[3]
https://github.com/fabric8io/kubernetes-client/blob/main/doc/KubernetesLog4j.md
<https://github.com/fabric8io/kubernetes-client/blob/main/doc/KubernetesLog4j.md>
[4] https://logging.apache.org/log4j/2.x/components.html#log4j-mongodb
<https://logging.apache.org/log4j/2.24.0/components.html#log4j-mongodb>
[5] https://logging.apache.org/log4j/2.x/components.html#log4j-mongodb4
<https://logging.apache.org/log4j/2.24.0/components.html#log4j-mongodb4>
=== JMX changes
Starting in version 2.24.0, JMX support is disabled by default and can
be re-enabled via the `log4j2.disableJmx=false` system property.
=== Added
* Add a faster `DefaultThreadContextMap` implementation. (#2330)
* Add Logback throwable-consuming semantics as an option in
`log4j-slf4j-impl` and `log4j-slf4j2-impl`. Users can enable it by
setting the property `log4j2.messageFactory` to
`org.apache.logging.slf4j.mess
age.ThrowableConsumingMessageFactory`.
(#2363)
* Add trace context fields to `GcpLayout.json` (#2498)
* Add _"Plugin Reference"_ to the website. It is a Javadoc-on-steroids
focusing on Log4j plugins. (#1954)
* Automate website deployment using the new CI infrastructure shipped
with `org.apache.logging:logging-parent:11.0.0`
=== Changed
* Fix usage of `log4j-api` in GraalVM without additional reachability
data. (#1539)
* Ignore exceptions thrown by PropertySources.
* Add logging to `PropertiesUtil` and fix `Duration` parser. (#1936)
* Disable level modification via JUL by default. (#2353)
* Centralize initialization in the `Provider` class and deprecate
`log4j2.loggerContextFactory` property. (#2374)
* Remove `log4j-kubernetes` lookup. User should migrate to
`io.fabric8:kubernetes-log4j`[6]. (#2412)
* Disable JMX support by default. Require `log4j2.disableJmx` to be
set to `false` to enable JMX support. (#2462)
* Replace some usages of `DateTimeFormatter#toString()` with
`DateTimeFormatter#formatTo(StringBuilder)` to cut down on allocations
(#2515)
* Disable programmatic configuration in Log4j 1 Bridge if
`log4j1.compatibility` is `false`. (#2778)
* Improve missing plugin descriptor warnings. (#2835)
* Remove configuration properties caching and (undocumented) fuzzy
property name matching. (#2849)
* Fixes property source ordering to account for different sources with
the same priority.
* Prioritize user-defined values of `log4j2.enableThreadLocals`,
`log4j2.garbagefreeThreadContextMap` and `log4j2.shutdownHookEnabled`
over the value of `log4j.isWebapp`. (#2517)
* Disallow duplicate keys in JSON Template Layout templates
* Deprecate `log4j2.defaultStatusLevel` property in Log4j Core in
favor of `log4j2.statusLoggerLevel` (#2481)
=== Deprecated
* Deprecate `Message#getFormat()` due to unclear semantics and
inconsistent implementations (#2773)
* Deprecate `org.apache.logging.log4j.EventLogger` for removal (#2665)
* Deprecate `org.apache.logging.log4j.core.appender.rolling.action.Duration`
class for removal (#2425)
* Deprecate the `log4j-mongodb4` module in favor of `log4j-mongodb` (#2486)
=== Fixed
* Use FQDN in RFC5424 Layout. (#1740)
* Fix custom thread-context data provider handling in lookups and
filters. (#2331)
* Fix handling of `log4j2.messageFactory` and
`log4j2.flowMessageFactory` properties (#2505)
* Discard blank keys in `PropertiesUtil` (#2414)
* Fix handling of `log4j2.debug`. (#2703)
* Fix location requirement for the `%F` and `%file` keys in Pattern
Layout (#2781)
* Fix `JsonLayout` failure under JPMS. (#2814)
* Fix empty string handling for `TruncatingBufferedWriter` (#2609)
* Fix that parameterized message formatting throws an exception when
there are insufficient number of parameters. It previously simply
didn't replace the '{}' sequence. The behavior changed in 2.21.0 and
should be restored for backward compatibility. (#2380)
* Fix `ClassCastException` in LMAX Disruptor 3 initialization (#2768)
* Fix requirement on the `java.management` module when JMX is
disabled, which is the default (#2775)
* Website is migrated to Antora with several formatting and link fixes
(#2427)
=== Removed
* Move Flume Appender to its own release lifecycle. (#2902)
=== Updated
* Add module log4j-mongodb to track the current MongoDB driver
(currently version 5). (#2486)
* Remove module log4j-mongodb3, use log4j-mongodb instead,
log4j-mongodb4 is deprecated for removal. (#2486)
* Update `com.fasterxml.jackson:jackson-bom` to version `2.17.2` (#2719)
* Update `com.github.luben:zstd-jni` to version `1.5.6-5` (#2901)
* Update `commons-codec:commons-codec` to version `1.17.1` (#2741)
* Update `commons-logging:commons-logging` to version `1.3.4` (#2864)
* Update `github/codeql-action` to version `3.25.1` (#2483)
* Update `io.fabric8:docker-maven-plugin` to version `0.45.0` (#2776)
* Update `org.apache.cassandra:cassandra-all` to version `3.11.17` (#2479)
* Update `org.apache.commons:commons-compress` to version `1.27.1` (#2869)
* Update `org.apache.commons:commons-csv` to version `1.11.0` (#2565)
* Update `org.apache.commons:commons-lang3` to version `3.17.0` (#2907)
* Update `org.apache.kafka:kafka-clients` to version `3.8.0` (#2777)
* Update `org.apache.logging:logging-parent` to version `11.2.0`
* Update `org.eclipse.jetty:jetty-bom` to version `9.4.55.v20240627` (#2709)
* Update `org.jctools:jctools-core` to version `4.0.5` (#2637)
* Update log4j-mongodb4 `org.mongodb:*` from `4.11.1` to `4.11.2` (#2409)
* Update `org.mongodb:bson` to version `5.1.3` (#2823)
* Update `org.slf4j:slf4j-api` to version `2.0.16` (#2829)
* Update `org.springframework:spring-framework-bom` to version `5.3.39`
(#2840)