[ANNOUNCEMENT] Apache Log4j 2.15.0 Released

Ralph Goers <[email protected]> Fri, 10 Dec 2021 03:08:12 -0700
Newsgroups gmane.comp.apache.logging,gmane.comp.jakarta.log4j.user
Message-ID <[email protected]>
--Apple-Mail=_768A76DF-65F4-426A-B261-C34545413CAA
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

The Apache Log4j 2 team is pleased to announce the Log4j 2.15.0 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 other modern features =
such as support for Markers, lambda expressions for lazy logging, =
property substitution using Lookups, multiple patterns on a =
PatternLayout and asynchronous Loggers. Another notable Log4j 2 feature =
is the ability to be "garbage-free" (avoid allocating temporary objects) =
while logging. In addition, Log4j 2 will not lose events while =
reconfiguring.

The artifacts may be downloaded from =
https://logging.apache.org/log4j/2.x/download.html =
<https://logging.apache.org/log4j/2.x/download.html> =
<https://logging.apache.org/log4j/2.x/download.html =
<https://logging.apache.org/log4j/2.x/download.html>>.

This release contains a number of bug fixes and minor enhancements which =
are listed below.

The Log4j team has been made aware of a security vulnerability, =
CVE-2021-44228, that has been addressed in Log4j 2.15.0.

Log4j=E2=80=99s JNDI support has not restricted what names could be =
resolved. Some protocols are unsafe or can allow remote code execution. =
Log4j now limits the protocols by default to only java, ldap, and ldaps =
and limits the ldap protocols to only accessing Java primitive objects =
by default served on the local host.

One vector that allowed exposure to this vulnerability was Log4j=E2=80=99s=
 allowance of Lookups to appear in log messages. As of Log4j 2.15.0 this =
feature is now disabled by default. While an option has been provided to =
enable Lookups in this fashion, users are strongly discouraged from =
enabling it.

Users who cannot upgrade to 2.15.0 can mitigate the exposure by:

a) Users of Log4j 2.10 or greater may add =
-Dlog4j.formatMsgNoLookups=3Dtrue as a command line option or add =
log4j.formatMsgNoLookups=3Dtrue to a log4j2.component.properties file on =
the classpath to prevent lookups in log event messages.
b) Users since Log4j 2.7 may specify %m{nolookups} in the PatternLayout =
configuration to prevent lookups in log event messages.
c) Remove the JndiLookup and JndiManager classes from the log4j-core =
jar. Removal of the JndiManager will cause the JndiContextSelector and =
JMSAppender to no longer function.

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. SLF4J-2.0.0 alpha releases =
are not fully supported. See =
https://issues.apache.org/jira/browse/LOG4J2-2975 =
<https://issues.apache.org/jira/browse/LOG4J2-2975> =
<https://issues.apache.org/jira/browse/LOG4J2-2975 =
<https://issues.apache.org/jira/browse/LOG4J2-2975>> and =
https://jira.qos.ch/browse/SLF4J-511 =
<https://jira.qos.ch/browse/SLF4J-511> =
<https://jira.qos.ch/browse/SLF4J-511 =
<https://jira.qos.ch/browse/SLF4J-511>>.

Some of the new features in Log4j 2.15.0 include:

	=E2=80=A2 Support for Arbiters, which are conditionals that can =
enable sections of the logging configuration for inclusion or exclusion. =
In particular, SpringProfile, SystemProperty, Script, and Class Arbiters =
have been provided that use the Spring profile, System property, the =
result of a script, or the presence of a class respectively to determine =
whether a section of configuration should be included.
	=E2=80=A2 Support for Jakarta EE 9. This is functionally =
equivalent to Log4j's log4j-web module but uses the Jakarta project.
	=E2=80=A2 Various performance improvements.

Key changes to note:

	=E2=80=A2 Prior to this release Log4j would automatically =
resolve Lookups contained in the message or its parameters in the =
Pattern Layout. This behavior is no longer the default and must be =
enabled by specifying %msg{lookup}.
	=E2=80=A2 The JNDI Lookup has been restricted to only support =
the java, ldap, and ldaps protocols by default. LDAP also no longer =
supports classes that implement the Referenceable interface and =
restricts the Serializable classes to the Java primative classes by =
default and requires an allow list to be specified to access remote LDAP =
servers.
The Log4j 2.15.0 API, as well as many core components, maintains binary =
compatibility with previous releases.

GA Release 2.15.0

Changes in this version include:

New Features

	=E2=80=A2 LOG4J2-3198: Pattern layout no longer enables lookups =
within message text by default for cleaner API boundaries and reduced =
formatting overhead. The old 'log4j2.formatMsgNoLookups' which enabled =
this behavior has been removed as well as the 'nolookups' message =
pattern converter option. The old behavior can be enabled on a =
per-pattern basis using '%m{lookups}'.
	=E2=80=A2 LOG4J2-3194: Allow fractional attributes for size =
attribute of SizeBsaedTriggeringPolicy. Thanks to markuss.
	=E2=80=A2 LOG4J2-2978: Add support for Jakarta EE 9 (Tomcat 10 / =
Jetty 11) Thanks to Michael Seele.
	=E2=80=A2 LOG4J2-3189: Improve NameAbbreviator worst-case =
performance.
	=E2=80=A2 LOG4J2-3170: Make CRLF/HTML encoding run in O(n) =
worst-case time, rather than O(n^2). Thanks to Gareth Smith.
	=E2=80=A2 LOG4J2-3133: Add missing slf4j-api singleton accessors =
to log4j-slf4j-impl (1.7) StaticMarkerBinder and StaticMDCBinder. This =
doesn't impact behavior or correctness, but avoids throwing and catching =
NoSuchMethodErrors when slf4j is initialized and avoids linkage linting =
warnings.
	=E2=80=A2 LOG4J2-2885: Add support for US-style date patterns =
and micro/nano seconds to FixedDateTime. Thanks to Markus Spann.
	=E2=80=A2 LOG4J2-3116: Add JsonTemplateLayout for Google Cloud =
Platform structured logging layout.
	=E2=80=A2 LOG4J2-3067: Add CounterResolver to =
JsonTemplateLayout.
	=E2=80=A2 LOG4J2-3074: Add replacement parameter to =
ReadOnlyStringMapResolver.
	=E2=80=A2 LOG4J2-3051: Add CaseConverterResolver to =
JsonTemplateLayout.
	=E2=80=A2 LOG4J2-3064: Add Arbiters and SpringProfile plugin.
	=E2=80=A2 LOG4J2-3056: Refactor MD5 usage for sharing sensitive =
information. Thanks to Marcono1234.
	=E2=80=A2 LOG4J2-3004: Add plugin support to JsonTemplateLayout.
	=E2=80=A2 LOG4J2-3050: Allow AdditionalFields to be ignored if =
their value is null or a zero-length String.
	=E2=80=A2 LOG4J2-3049: Allow MapMessage and ThreadContext =
attributes to be prefixed.
	=E2=80=A2 LOG4J2=3D3048: Add improved MapMessge support to =
GelfLayout.
	=E2=80=A2 LOG4J2-3044: Add RepeatPatternConverter.
	=E2=80=A2 LOG4J2-2940: Context selectors are aware of their =
dependence upon the callers ClassLoader, allowing basic context =
selectors to avoid the unnecessary overhead of walking the stack to =
determine the caller's ClassLoader.
	=E2=80=A2 LOG4J2-2940: Add BasicAsyncLoggerContextSelector =
equivalent to AsyncLoggerContextSelector for applications with a single =
LoggerContext. This selector avoids classloader lookup overhead incurred =
by the existing AsyncLoggerContextSelector.
	=E2=80=A2 LOG4J2-3041: Allow a PatternSelector to be specified =
on GelfLayout.
	=E2=80=A2 LOG4J2-3141: Avoid ThreadLocal overhead in =
RandomAccessFileAppender, RollingRandomAccessFileManager, and =
MemoryMappedFileManager due to the unused setEndOfBatch and isEndOfBatch =
methods. The methods on LogEvent are preferred.
	=E2=80=A2 LOG4J2-3144: Prefer string.getBytes(Charset) over =
string.getBytes(String) based on performance improvements in modern Java =
releases.
	=E2=80=A2 LOG4J2-3171: Improve PatternLayout performance by =
reducing unnecessary indirection and branching.
Fixed Bugs

	=E2=80=A2 LOG4J2-3201: Limit the protocols JNDI can use by =
default. Limit the servers and classes that can be accessed via LDAP.
	=E2=80=A2 LOG4J2-3114: Enable immediate flush on =
RollingFileAppender when buffered i/o is not enabled. Thanks to Barnabas =
Bodnar.
	=E2=80=A2 LOG4J2-3168: Fix bug when file names contain regex =
characters. Thanks to Benjamin W=C3=B6ster.
	=E2=80=A2 LOG4J2-3110: Fix the number of {}-placeholders in the =
string literal argument does not match the number of other arguments to =
the logging call. Thanks to Arturo Bernal.
	=E2=80=A2 LOG4J2-3060: Fix thread-safety issues in =
DefaultErrorHandler. Thanks to Nikita Mikhailov.
	=E2=80=A2 LOG4J2-3185: Fix thread-safety issues in =
DefaultErrorHandler. Thanks to mzbonnt.
	=E2=80=A2 LOG4J2-3183: Avoid using MutableInstant of the event =
as a cache key in JsonTemplateLayout.
	=E2=80=A2 LOG4J2-2829: SocketAppender should propagate failures =
when reconnection fails.
	=E2=80=A2 LOG4J2-3172: Buffer immutable log events in the =
SmtpManager. Thanks to Barry Fleming.
	=E2=80=A2 LOG4J2-3175: Avoid KafkaManager override when topics =
differ. Thanks to wuqian0808.
	=E2=80=A2 LOG4J2-3160: Fix documentation on how to toggle =
log4j2.debug system property. Thanks to Lars Bohl.
	=E2=80=A2 LOG4J2-3159: Fixed an unlikely race condition in =
Log4jMarker.getParents() volatile access.
	=E2=80=A2 LOG4J2-3153: DatePatternConverter performance is not =
impacted by microsecond-precision clocks when such precision isn't =
required.
	=E2=80=A2 LOG4J2-2808: LoggerContext skips resolving localhost =
when hostName is configured. Thanks to Asapha Halifa.
	=E2=80=A2 LOG4J2-3150: RandomAccessFile appender uses the =
correct default buffer size of 256 kB rather than the default appender =
buffer size of 8 kB.
	=E2=80=A2 LOG4J2-3142: log4j-1.2-api implements =
LogEventAdapter.getTimestamp() based on the original event timestamp =
instead of returning zero. Thanks to John Meikle.
	=E2=80=A2 LOG4J2-3083: log4j-slf4j-impl and log4j-slf4j18-impl =
correctly detect the calling class using both LoggerFactory.getLogger =
methods as well as LoggerFactory.getILoggerFactory().getLogger.
	=E2=80=A2 LOG4J2-2816: Handle Disruptor event translation =
exceptions. Thanks to Jacob Shields.
	=E2=80=A2 LOG4J2-3121: log4j2 config modified at run-time may =
trigger incomplete MBean re-initialization due to =
InstanceAlreadyExistsException. Thanks to Markus Spann.
	=E2=80=A2 LOG4J2-3107: SmtpManager.createManagerName ignores =
port. Thanks to Markus Spann.
	=E2=80=A2 LOG4J2-3080: Use SimpleMessage in Log4j 1 Category =
whenever possible.
	=E2=80=A2 LOG4J2-3102: Fix a regression in 2.14.1 which allowed =
the AsyncAppender background thread to keep the JVM alive because the =
daemon flag was not set.
	=E2=80=A2 LOG4J2-3103: Fix race condition which can result in =
ConcurrentModificationException on context.stop. Thanks to Mike Glazer.
	=E2=80=A2 LOG4J2-3092: Fix JsonWriter memory leaks due to =
retained excessive buffer growth. Thanks to xmh51.
	=E2=80=A2 LOG4J2-3089: Fix sporadic =
JsonTemplateLayoutNullEventDelimiterTest failures on Windows. Thanks to =
Tim Perry.
	=E2=80=A2 LOG4J2-3075: Fix formatting of nanoseconds in =
JsonTemplateLayout.
	=E2=80=A2 LOG4J2-3087: Fix race in JsonTemplateLayout where a =
timestamp could end up unquoted. Thanks to Anton Klar=C3=A9n.
	=E2=80=A2 LOG4J2-3070: Ensure =
EncodingPatternConverter#handlesThrowable is implemented. Thanks to =
Romain Manni-Bucau.
	=E2=80=A2 LOG4J2-3054: BasicContextSelector hasContext and =
shutdown take the default context into account
	=E2=80=A2 LOG4J2-2940: Slf4j implementations walk the stack at =
most once rather than twice to determine the caller's class loader.
	=E2=80=A2 LOG4J2-2965: Fixed a deadlock between the =
AsyncLoggerContextSelector and java.util.logging.LogManager by updating =
Disruptor to 3.4.4.
	=E2=80=A2 LOG4J2-3095: Category.setLevel should accept null =
value. Thanks to Kenny MacLeod, Gary Gregory.
	=E2=80=A2 LOG4J2-3174: Wrong subject on mail when it depends on =
the LogEvent Thanks to romainmoreau.
Changes

	=E2=80=A2 : Update Spring framework to 5.3.13, Spring Boot to =
2.5.7, and Spring Cloud to 2020.0.4.

	=E2=80=A2 LOG4J2-2025: Provide support for overriding the Tomcat =
Log class in Tomcat 8.5+.

	=E2=80=A2 : Updated dependencies.

- com.fasterxml.jackson.core:jackson-annotations ................. =
2.12.2 -> 2.12.4
- com.fasterxml.jackson.core:jackson-core ........................ =
2.12.2 -> 2.12.4
- com.fasterxml.jackson.core:jackson-databind .................... =
2.12.2 -> 2.12.4
- com.fasterxml.jackson.dataformat:jackson-dataformat-xml ........ =
2.12.2 -> 2.12.4
- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml ....... =
2.12.2 -> 2.12.4
- com.fasterxml.jackson.module:jackson-module-jaxb-annotations ... =
2.12.2 -> 2.12.4
- com.fasterxml.woodstox:woodstox-core ........................... 6.2.4 =
-> 6.2.6
- commons-io:commons-io .......................................... 2.8.0 =
-> 2.11.0
- net.javacrumbs.json-unit:json-unit ............................. =
2.24.0 -> 2.25.0
- net.javacrumbs.json-unit:json-unit ............................. =
2.25.0 -> 2.27.0
- org.apache.activemq:activemq-broker ............................ =
5.16.1 -> 5.16.2
- org.apache.activemq:activemq-broker ............................ =
5.16.2 -> 5.16.3
- org.apache.commons:commons-compress ............................ 1.20 =
-> 1.21
- org.apache.commons:commons-csv ................................. 1.8 =
-> 1.9.0
- org.apache.commons:commons-dbcp2 ............................... 2.8.0 =
-> 2.9.0
- org.apache.commons:commons-pool2 ............................... 2.9.0 =
-> 2.11.1
- org.apache.maven.plugins:maven-failsafe-plugin ................. =
2.22.2 -> 3.0.0-M5
- org.apache.maven.plugins:maven-surefire-plugin ................. =
2.22.2 -> 3.0.0-M5
- org.apache.rat:apache-rat-plugin ............................... 0.12 =
-> 0.13
- org.assertj:assertj-core ....................................... =
3.19.0 -> 3.20.2
- org.codehaus.groovy:groovy-dateutil ............................ 3.0.7 =
-> 3.0.8
- org.codehaus.groovy:groovy-jsr223 .............................. 3.0.7 =
-> 3.0.8
- org.codehaus.plexus:plexus-utils ............................... 3.3.0 =
-> 3.4.0
- org.eclipse.persistence:javax.persistence ...................... 2.1.1 =
-> 2.2.1
- org.eclipse.persistence:org.eclipse.persistence.jpa ............ 2.6.5 =
-> 2.6.9
- org.eclipse.persistence:org.eclipse.persistence.jpa ............ 2.7.8 =
-> 2.7.9
- org.fusesource.jansi ........................................... 2.3.2 =
-> 2.3.4
- org.fusesource.jansi:jansi ..................................... 2.3.1 =
-> 2.3.2
- org.hsqldb:hsqldb .............................................. 2.5.1 =
-> 2.5.2
- org.junit.jupiter:junit-jupiter-engine ......................... 5.7.1 =
-> 5.7.2
- org.junit.jupiter:junit-jupiter-migrationsupport ............... 5.7.1 =
-> 5.7.2
- org.junit.jupiter:junit-jupiter-params ......................... 5.7.1 =
-> 5.7.2
- org.junit.vintage:junit-vintage-engine ......................... 5.7.1 =
-> 5.7.2
- org.liquibase:liquibase-core ................................... 3.5.3 =
-> 3.5.5
- org.mockito:mockito-core ....................................... 3.8.0 =
-> 3.11.2
- org.mockito:mockito-junit-jupiter .............................. 3.8.0 =
-> 3.11.2
- org.springframework:spring-aop ................................. 5.3.3 =
-> 5.3.9
- org.springframework:spring-beans ............................... 5.3.3 =
-> 5.3.9
- org.springframework:spring-context ............................. 5.3.3 =
-> 5.3.9
- org.springframework:spring-context-support ..................... 5.3.3 =
-> 5.3.9
- org.springframework:spring-core ................................ 5.3.3 =
-> 5.3.9
- org.springframework:spring-expression .......................... 5.3.3 =
-> 5.3.9
- org.springframework:spring-oxm ................................. 5.3.3 =
-> 5.3.9
- org.springframework:spring-test ................................ 5.3.3 =
-> 5.3.9
- org.springframework:spring-web ................................. 5.3.3 =
-> 5.3.9
- org.springframework:spring-webmvc .............................. 5.3.3 =
-> 5.3.9
- org.tukaani:xz ................................................. 1.8 =
-> 1.9

Apache Log4j 2.15.0 requires a minimum of Java 8 to build and run. Log4j =
2.12.1 is the last release to support Java 7. Java 7 is not longer =
supported by the Log4j team.

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:=

--Apple-Mail=_768A76DF-65F4-426A-B261-C34545413CAA
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">The =
Apache Log4j 2 team is pleased to announce the Log4j 2.15.0 release!<br =
class=3D""><br class=3D"">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 other modern features such as support for Markers, lambda =
expressions for lazy logging, property substitution using Lookups, =
multiple patterns on a PatternLayout and asynchronous Loggers. Another =
notable Log4j 2 feature is the ability to be "garbage-free" (avoid =
allocating temporary objects) while logging. In addition, Log4j 2 will =
not lose events while reconfiguring.<br class=3D""><br class=3D"">The =
artifacts may be downloaded from&nbsp;<a =
href=3D"https://logging.apache.org/log4j/2.x/download.html" =
class=3D"">https://logging.apache.org/log4j/2.x/download.html</a>&nbsp;&lt=
;<a href=3D"https://logging.apache.org/log4j/2.x/download.html" =
class=3D"">https://logging.apache.org/log4j/2.x/download.html</a>&gt;.<br =
class=3D""><br class=3D"">This release contains a number of bug fixes =
and minor enhancements which are listed below.<br class=3D""><br =
class=3D"">The Log4j team has been made aware of a security =
vulnerability, CVE-2021-44228, that has been addressed in Log4j =
2.15.0.<br class=3D""><br class=3D"">Log4j=E2=80=99s JNDI support has =
not restricted what names could be resolved. Some protocols are unsafe =
or can allow remote code execution. Log4j now limits the protocols by =
default to only java, ldap, and ldaps and limits the ldap protocols to =
only accessing Java primitive objects by default served on the local =
host.<br class=3D""><br class=3D"">One vector that allowed exposure to =
this vulnerability was Log4j=E2=80=99s allowance of Lookups to appear in =
log messages. As of Log4j 2.15.0 this feature is now disabled by =
default. While an option has been provided to enable Lookups in this =
fashion, users are strongly discouraged from enabling it.<br =
class=3D""><br class=3D"">Users who cannot upgrade to 2.15.0 can =
mitigate the exposure by:<br class=3D""><br class=3D"">a) Users of Log4j =
2.10 or greater may add -Dlog4j.formatMsgNoLookups=3Dtrue as a command =
line option or add log4j.formatMsgNoLookups=3Dtrue to a =
log4j2.component.properties file on the classpath to prevent lookups in =
log event messages.<br class=3D"">b) Users since Log4j 2.7 may specify =
%m{nolookups} in the PatternLayout configuration to prevent lookups in =
log event messages.<br class=3D"">c) Remove the JndiLookup and =
JndiManager classes from the log4j-core jar. Removal of the JndiManager =
will cause the JndiContextSelector and JMSAppender to no longer =
function.<br class=3D""><br class=3D"">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. SLF4J-2.0.0 alpha releases are not fully supported. See&nbsp;<a =
href=3D"https://issues.apache.org/jira/browse/LOG4J2-2975" =
class=3D"">https://issues.apache.org/jira/browse/LOG4J2-2975</a>&nbsp;&lt;=
<a href=3D"https://issues.apache.org/jira/browse/LOG4J2-2975" =
class=3D"">https://issues.apache.org/jira/browse/LOG4J2-2975</a>&gt; =
and&nbsp;<a href=3D"https://jira.qos.ch/browse/SLF4J-511" =
class=3D"">https://jira.qos.ch/browse/SLF4J-511</a>&nbsp;&lt;<a =
href=3D"https://jira.qos.ch/browse/SLF4J-511" =
class=3D"">https://jira.qos.ch/browse/SLF4J-511</a>&gt;.<br class=3D""><br=
 class=3D"">Some of the new features in Log4j 2.15.0 include:<br =
class=3D""><br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 Support for Arbiters, =
which are conditionals that can enable sections of the logging =
configuration for inclusion or exclusion. In particular, SpringProfile, =
SystemProperty, Script, and Class Arbiters have been provided that use =
the Spring profile, System property, the result of a script, or the =
presence of a class respectively to determine whether a section of =
configuration should be included.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
Support for Jakarta EE 9. This is functionally equivalent to Log4j's =
log4j-web module but uses the Jakarta project.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
Various performance improvements.<br class=3D""><br class=3D"">Key =
changes to note:<br class=3D""><br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
Prior to this release Log4j would automatically resolve Lookups =
contained in the message or its parameters in the Pattern Layout. This =
behavior is no longer the default and must be enabled by specifying =
%msg{lookup}.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 The JNDI Lookup has =
been restricted to only support the java, ldap, and ldaps protocols by =
default. LDAP also no longer supports classes that implement the =
Referenceable interface and restricts the Serializable classes to the =
Java primative classes by default and requires an allow list to be =
specified to access remote LDAP servers.<br class=3D"">The Log4j 2.15.0 =
API, as well as many core components, maintains binary compatibility =
with previous releases.<br class=3D""><br class=3D"">GA Release =
2.15.0<br class=3D""><br class=3D"">Changes in this version include:<br =
class=3D""><br class=3D"">New Features<br class=3D""><br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3198: Pattern layout no longer enables lookups within message =
text by default for cleaner API boundaries and reduced formatting =
overhead. The old 'log4j2.formatMsgNoLookups' which enabled this =
behavior has been removed as well as the 'nolookups' message pattern =
converter option. The old behavior can be enabled on a per-pattern basis =
using '%m{lookups}'.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3194: Allow =
fractional attributes for size attribute of SizeBsaedTriggeringPolicy. =
Thanks to markuss.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-2978: Add =
support for Jakarta EE 9 (Tomcat 10 / Jetty 11) Thanks to Michael =
Seele.<br class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: =
pre;">	</span>=E2=80=A2 LOG4J2-3189: Improve NameAbbreviator worst-case =
performance.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3170: Make =
CRLF/HTML encoding run in O(n) worst-case time, rather than O(n^2). =
Thanks to Gareth Smith.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3133: Add =
missing slf4j-api singleton accessors to log4j-slf4j-impl (1.7) =
StaticMarkerBinder and StaticMDCBinder. This doesn't impact behavior or =
correctness, but avoids throwing and catching NoSuchMethodErrors when =
slf4j is initialized and avoids linkage linting warnings.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-2885: Add support for US-style date patterns and =
micro/nano seconds to FixedDateTime. Thanks to Markus Spann.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3116: Add JsonTemplateLayout for Google Cloud =
Platform structured logging layout.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3067: Add CounterResolver to JsonTemplateLayout.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3074: Add replacement parameter to =
ReadOnlyStringMapResolver.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3051: Add =
CaseConverterResolver to JsonTemplateLayout.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3064: Add Arbiters and SpringProfile plugin.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3056: Refactor MD5 usage for sharing sensitive information. =
Thanks to Marcono1234.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3004: Add plugin =
support to JsonTemplateLayout.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3050: Allow AdditionalFields to be ignored if their value is null =
or a zero-length String.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3049: Allow =
MapMessage and ThreadContext attributes to be prefixed.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2=3D3048: Add improved MapMessge support to =
GelfLayout.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3044: Add =
RepeatPatternConverter.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-2940: Context =
selectors are aware of their dependence upon the callers ClassLoader, =
allowing basic context selectors to avoid the unnecessary overhead of =
walking the stack to determine the caller's ClassLoader.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-2940: Add BasicAsyncLoggerContextSelector =
equivalent to AsyncLoggerContextSelector for applications with a single =
LoggerContext. This selector avoids classloader lookup overhead incurred =
by the existing AsyncLoggerContextSelector.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3041: Allow a PatternSelector to be specified on GelfLayout.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3141: Avoid ThreadLocal overhead in =
RandomAccessFileAppender, RollingRandomAccessFileManager, and =
MemoryMappedFileManager due to the unused setEndOfBatch and isEndOfBatch =
methods. The methods on LogEvent are preferred.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3144: Prefer string.getBytes(Charset) over =
string.getBytes(String) based on performance improvements in modern Java =
releases.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3171: Improve =
PatternLayout performance by reducing unnecessary indirection and =
branching.<br class=3D"">Fixed Bugs<br class=3D""><br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3201: Limit the protocols JNDI can use by default. Limit the =
servers and classes that can be accessed via LDAP.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3114: Enable immediate flush on RollingFileAppender when buffered =
i/o is not enabled. Thanks to Barnabas Bodnar.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3168: Fix bug when file names contain regex characters. Thanks to =
Benjamin W=C3=B6ster.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3110: Fix the =
number of {}-placeholders in the string literal argument does not match =
the number of other arguments to the logging call. Thanks to Arturo =
Bernal.<br class=3D""><span class=3D"Apple-tab-span" style=3D"white-space:=
 pre;">	</span>=E2=80=A2 LOG4J2-3060: Fix thread-safety issues in =
DefaultErrorHandler. Thanks to Nikita Mikhailov.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3185: Fix thread-safety issues in DefaultErrorHandler. Thanks to =
mzbonnt.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3183: Avoid =
using MutableInstant of the event as a cache key in =
JsonTemplateLayout.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-2829: =
SocketAppender should propagate failures when reconnection fails.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3172: Buffer immutable log events in the =
SmtpManager. Thanks to Barry Fleming.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3175: Avoid KafkaManager override when topics differ. Thanks to =
wuqian0808.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3160: Fix =
documentation on how to toggle log4j2.debug system property. Thanks to =
Lars Bohl.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3159: Fixed an =
unlikely race condition in Log4jMarker.getParents() volatile access.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3153: DatePatternConverter performance is not =
impacted by microsecond-precision clocks when such precision isn't =
required.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-2808: =
LoggerContext skips resolving localhost when hostName is configured. =
Thanks to Asapha Halifa.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3150: =
RandomAccessFile appender uses the correct default buffer size of 256 kB =
rather than the default appender buffer size of 8 kB.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3142: log4j-1.2-api implements LogEventAdapter.getTimestamp() =
based on the original event timestamp instead of returning zero. Thanks =
to John Meikle.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3083: =
log4j-slf4j-impl and log4j-slf4j18-impl correctly detect the calling =
class using both LoggerFactory.getLogger methods as well as =
LoggerFactory.getILoggerFactory().getLogger.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-2816: Handle Disruptor event translation exceptions. Thanks to =
Jacob Shields.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3121: log4j2 =
config modified at run-time may trigger incomplete MBean =
re-initialization due to InstanceAlreadyExistsException. Thanks to =
Markus Spann.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3107: =
SmtpManager.createManagerName ignores port. Thanks to Markus Spann.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3080: Use SimpleMessage in Log4j 1 Category =
whenever possible.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3102: Fix a =
regression in 2.14.1 which allowed the AsyncAppender background thread =
to keep the JVM alive because the daemon flag was not set.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3103: Fix race condition which can result in =
ConcurrentModificationException on context.stop. Thanks to Mike =
Glazer.<br class=3D""><span class=3D"Apple-tab-span" style=3D"white-space:=
 pre;">	</span>=E2=80=A2 LOG4J2-3092: Fix JsonWriter memory leaks due to =
retained excessive buffer growth. Thanks to xmh51.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3089: Fix sporadic JsonTemplateLayoutNullEventDelimiterTest =
failures on Windows. Thanks to Tim Perry.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3075: Fix formatting of nanoseconds in JsonTemplateLayout.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3087: Fix race in JsonTemplateLayout where a =
timestamp could end up unquoted. Thanks to Anton Klar=C3=A9n.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3070: Ensure =
EncodingPatternConverter#handlesThrowable is implemented. Thanks to =
Romain Manni-Bucau.<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-3054: =
BasicContextSelector hasContext and shutdown take the default context =
into account<br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 LOG4J2-2940: Slf4j =
implementations walk the stack at most once rather than twice to =
determine the caller's class loader.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-2965: Fixed a deadlock between the AsyncLoggerContextSelector and =
java.util.logging.LogManager by updating Disruptor to 3.4.4.<br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 LOG4J2-3095: Category.setLevel should accept null =
value. Thanks to Kenny MacLeod, Gary Gregory.<br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-3174: Wrong subject on mail when it depends on the LogEvent =
Thanks to romainmoreau.<br class=3D"">Changes<br class=3D""><br =
class=3D""><span class=3D"Apple-tab-span" style=3D"white-space: pre;">	=
</span>=E2=80=A2 : Update Spring framework to 5.3.13, Spring Boot to =
2.5.7, and Spring Cloud to 2020.0.4.<br class=3D""><br class=3D""><span =
class=3D"Apple-tab-span" style=3D"white-space: pre;">	</span>=E2=80=A2 =
LOG4J2-2025: Provide support for overriding the Tomcat Log class in =
Tomcat 8.5+.<br class=3D""><br class=3D""><span class=3D"Apple-tab-span" =
style=3D"white-space: pre;">	</span>=E2=80=A2 : Updated =
dependencies.<br class=3D""><br class=3D"">- =
com.fasterxml.jackson.core:jackson-annotations ................. 2.12.2 =
-&gt; 2.12.4<br class=3D"">- com.fasterxml.jackson.core:jackson-core =
........................ 2.12.2 -&gt; 2.12.4<br class=3D"">- =
com.fasterxml.jackson.core:jackson-databind .................... 2.12.2 =
-&gt; 2.12.4<br class=3D"">- =
com.fasterxml.jackson.dataformat:jackson-dataformat-xml ........ 2.12.2 =
-&gt; 2.12.4<br class=3D"">- =
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml ....... 2.12.2 =
-&gt; 2.12.4<br class=3D"">- =
com.fasterxml.jackson.module:jackson-module-jaxb-annotations ... 2.12.2 =
-&gt; 2.12.4<br class=3D"">- com.fasterxml.woodstox:woodstox-core =
........................... 6.2.4 -&gt; 6.2.6<br class=3D"">- =
commons-io:commons-io .......................................... 2.8.0 =
-&gt; 2.11.0<br class=3D"">- net.javacrumbs.json-unit:json-unit =
............................. 2.24.0 -&gt; 2.25.0<br class=3D"">- =
net.javacrumbs.json-unit:json-unit ............................. 2.25.0 =
-&gt; 2.27.0<br class=3D"">- org.apache.activemq:activemq-broker =
............................ 5.16.1 -&gt; 5.16.2<br class=3D"">- =
org.apache.activemq:activemq-broker ............................ 5.16.2 =
-&gt; 5.16.3<br class=3D"">- org.apache.commons:commons-compress =
............................ 1.20 -&gt; 1.21<br class=3D"">- =
org.apache.commons:commons-csv ................................. 1.8 =
-&gt; 1.9.0<br class=3D"">- org.apache.commons:commons-dbcp2 =
............................... 2.8.0 -&gt; 2.9.0<br class=3D"">- =
org.apache.commons:commons-pool2 ............................... 2.9.0 =
-&gt; 2.11.1<br class=3D"">- =
org.apache.maven.plugins:maven-failsafe-plugin ................. 2.22.2 =
-&gt; 3.0.0-M5<br class=3D"">- =
org.apache.maven.plugins:maven-surefire-plugin ................. 2.22.2 =
-&gt; 3.0.0-M5<br class=3D"">- org.apache.rat:apache-rat-plugin =
............................... 0.12 -&gt; 0.13<br class=3D"">- =
org.assertj:assertj-core ....................................... 3.19.0 =
-&gt; 3.20.2<br class=3D"">- org.codehaus.groovy:groovy-dateutil =
............................ 3.0.7 -&gt; 3.0.8<br class=3D"">- =
org.codehaus.groovy:groovy-jsr223 .............................. 3.0.7 =
-&gt; 3.0.8<br class=3D"">- org.codehaus.plexus:plexus-utils =
............................... 3.3.0 -&gt; 3.4.0<br class=3D"">- =
org.eclipse.persistence:javax.persistence ...................... 2.1.1 =
-&gt; 2.2.1<br class=3D"">- =
org.eclipse.persistence:org.eclipse.persistence.jpa ............ 2.6.5 =
-&gt; 2.6.9<br class=3D"">- =
org.eclipse.persistence:org.eclipse.persistence.jpa ............ 2.7.8 =
-&gt; 2.7.9<br class=3D"">- org.fusesource.jansi =
........................................... 2.3.2 -&gt; 2.3.4<br =
class=3D"">- org.fusesource.jansi:jansi =
..................................... 2.3.1 -&gt; 2.3.2<br class=3D"">- =
org.hsqldb:hsqldb .............................................. 2.5.1 =
-&gt; 2.5.2<br class=3D"">- org.junit.jupiter:junit-jupiter-engine =
......................... 5.7.1 -&gt; 5.7.2<br class=3D"">- =
org.junit.jupiter:junit-jupiter-migrationsupport ............... 5.7.1 =
-&gt; 5.7.2<br class=3D"">- org.junit.jupiter:junit-jupiter-params =
......................... 5.7.1 -&gt; 5.7.2<br class=3D"">- =
org.junit.vintage:junit-vintage-engine ......................... 5.7.1 =
-&gt; 5.7.2<br class=3D"">- org.liquibase:liquibase-core =
................................... 3.5.3 -&gt; 3.5.5<br class=3D"">- =
org.mockito:mockito-core ....................................... 3.8.0 =
-&gt; 3.11.2<br class=3D"">- org.mockito:mockito-junit-jupiter =
.............................. 3.8.0 -&gt; 3.11.2<br class=3D"">- =
org.springframework:spring-aop ................................. 5.3.3 =
-&gt; 5.3.9<br class=3D"">- org.springframework:spring-beans =
............................... 5.3.3 -&gt; 5.3.9<br class=3D"">- =
org.springframework:spring-context ............................. 5.3.3 =
-&gt; 5.3.9<br class=3D"">- org.springframework:spring-context-support =
..................... 5.3.3 -&gt; 5.3.9<br class=3D"">- =
org.springframework:spring-core ................................ 5.3.3 =
-&gt; 5.3.9<br class=3D"">- org.springframework:spring-expression =
.......................... 5.3.3 -&gt; 5.3.9<br class=3D"">- =
org.springframework:spring-oxm ................................. 5.3.3 =
-&gt; 5.3.9<br class=3D"">- org.springframework:spring-test =
................................ 5.3.3 -&gt; 5.3.9<br class=3D"">- =
org.springframework:spring-web ................................. 5.3.3 =
-&gt; 5.3.9<br class=3D"">- org.springframework:spring-webmvc =
.............................. 5.3.3 -&gt; 5.3.9<br class=3D"">- =
org.tukaani:xz ................................................. 1.8 =
-&gt; 1.9<br class=3D""><br class=3D"">Apache Log4j 2.15.0 requires a =
minimum of Java 8 to build and run. Log4j 2.12.1 is the last release to =
support Java 7. Java 7 is not longer supported by the Log4j team.<br =
class=3D""><br class=3D"">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:</body></html>=

--Apple-Mail=_768A76DF-65F4-426A-B261-C34545413CAA--