[ANNOUNCE] Apache Log4j 2.17.2 released

Ralph Goers <[email protected]> Mon, 28 Feb 2022 09:28:48 -0700
Newsgroups gmane.comp.apache.logging,gmane.comp.apache.cxf.devel,gmane.comp.jakarta.log4j.user
Message-ID <[email protected]>
The Apache Log4j 2 team is pleased to announce the Log4j 2.17.2 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.

This release contains the changes noted below:

	=E2=80=A2 Over 50 improvements and fixes to the Log4j 1.x =
support. Continued testing has shown it is a suitable replacement for =
Log4j 1.x in most cases.
	=E2=80=A2 Scripting now requires a system property be specified =
naming the languages the user wishes to allow. The scripting engine will =
not load if the property isn't set.
	=E2=80=A2 By default, the only remote protocol allowed for =
loading configuration files is HTTPS. Users can specify a system =
property to allow others or prevent remote loading entirely.
	=E2=80=A2 Variable resolution has been modified so that only =
properties defined as properties in the configuration file can be =
recursive. All other Lookups are now non-recursive. This addresses =
issues users were having resolving lookups specified in property =
definitions for use in the RoutingAppender and RollingFileAppender due =
to restrictions put in place in 2.17.1.
	=E2=80=A2 Many other fixes and improvements.

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 and =
https://jira.qos.ch/browse/SLF4J-511.

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

GA Release 2.17.2

Changes in this version include:

New Features

	=E2=80=A2 LOG4J2-3297: Limit loading of configuration via a url =
to https by default.
	=E2=80=A2 LOG4J2-2486: Require log4j2.Script.enableLanguages to =
be specified to enable scripting for specific languages.
	=E2=80=A2 LOG4J2-3303: Add TB support to FileSize. Thanks to =
ramananravi.
	=E2=80=A2 LOG4J2-3282: Add the log4j-to-jul JDK Logging Bridge =
Thanks to Michael Vorburger.
	=E2=80=A2 : Add =
org.apache.logging.log4j.core.appender.AsyncAppender.getAppenders() to =
more easily port from org.apache.log4j.AsyncAppender.getAllAppenders().
	=E2=80=A2 : Add Configurator.setLevel(Logger, Level), =
setLevel(String, String), and setLevel(Class, Level). Thanks to Gary =
Gregory.
	=E2=80=A2 LOG4J2-3341: Add shorthand syntax for properties =
configuration format for specifying a logger level and appender refs.
	=E2=80=A2 LOG4J2-3391: Add optional additional fields to =
NoSQLAppender. Thanks to Gary Gregory.
Fixed Bugs

	=E2=80=A2 LOG4J2-3304: Flag LogManager as initiialized if the =
LoggerFactory is provided as a property. Thanks to francis-FY.
	=E2=80=A2 LOG4J2-3404: Fix DefaultConfiguration leak in =
PatternLayout Thanks to Piotr Karwasz.
	=E2=80=A2 LOG4J2-3405: Document that the Spring Boot Lookup =
requires the log4j-spring-boot dependency.
	=E2=80=A2 LOG4J2-3317: Fix RoutingAppender backcompat and =
disallow recursive evaluation of lookup results outside of configuration =
properties.
	=E2=80=A2 LOG4J2-3333: Fix ThreadContextDataInjector =
initialization deadlock
	=E2=80=A2 LOG4J2-3358: Fix substitutions when programmatic =
configuration is used
	=E2=80=A2 LOG4J2-3306: OptionConverter could cause a =
StackOverflowError.
	=E2=80=A2 : Log4j 1.2 bridge class ConsoleAppender should extend =
WriterAppender and provide better compatibility with custom appenders.
	=E2=80=A2 : Log4j 1.2 bridge method NDC.inherit(Stack) should =
not use generics to provide source compatibility.
	=E2=80=A2 : Log4j 1.2 bridge class PatternLayout is missing =
constants DEFAULT_CONVERSION_PATTERN and TTCC_CONVERSION_PATTERN.
	=E2=80=A2 : Log4j 1.2 bridge class PropertyConfigurator should =
implement Configurator.
	=E2=80=A2 : Log4j 1.2 bridge interface Configurator =
doConfigure() methods should use LoggerRepository, not LoggerContext.
	=E2=80=A2 : Log4j 1.2 bridge class OptionConverter is missing =
selectAndConfigure() methods.
	=E2=80=A2 : Log4j 1.2 bridge class Category should implement =
AppenderAttachable.
	=E2=80=A2 : Log4j 1.2 bridge method Category.exists(String) =
should be static.
	=E2=80=A2 : Log4j 1.2 bridge methods missing in =
org.apache.log4j.Category: getDefaultHierarchy(), getHierarchy(), =
getLoggerRepository().
	=E2=80=A2 : Log4j 1.2 bridge class LogManager default =
constructor should be public.
	=E2=80=A2 : Log4j 1.2 bridge interface =
org.apache.log4j.spi.RendererSupport was in the wrong package and =
incomplete.
	=E2=80=A2 : Log4j 1.2 bridge interfaces missing from package =
org.apache.log4j.spi: ThrowableRenderer, ThrowableRendererSupport, =
TriggeringEventEvaluator.
	=E2=80=A2 : Log4j 1.2 bridge missing class =
org.apache.log4j.or.RendererMap.
	=E2=80=A2 LOG4J2-3281: Log4j 1.2 bridge =
PropertiesConfiguration.buildAppender not adding filters to custom =
appender.
	=E2=80=A2 LOG4J2-3316: Log4j 1.2 bridge should ignore case in =
properties file keys.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.component.helpers.Constants.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.helpers.LogLog.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.helpers.Loader.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.spi.RootLogger.
	=E2=80=A2 : Log4j 1.2 bridge class Category is missing some =
protected instance variables.
	=E2=80=A2 : Log4j 1.2 bridge adds org.apache.log4j.Hierarchy.
	=E2=80=A2 : Log4j 1.2 bridge methods =
Category.getChainedPriority() and getEffectiveLevel() should not be =
final.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.spi.NOPLoggerRepository and NOPLogger.
	=E2=80=A2 : Log4j 1.2 bridge adds =
org.apache.log4j.spi.DefaultRepositorySelector.
	=E2=80=A2 : Log4j 1.2 bridge implements =
LogManager.getCurrentLoggers() fully.
	=E2=80=A2 LOG4J2-3326: Log4j 1.2 bridge fixes parsing filters in =
properties configuration file #680. Thanks to Benjamin R=C3=B6hl, Gary =
Gregory.
	=E2=80=A2 LOG4J2-3326: Log4j 1.2 bridge missing =
OptionConverter.instantiateByKey(Properties, String, Class, Object). =
Thanks to Gary Gregory.
	=E2=80=A2 LOG4J2-3326: Log4j 1.2 bridge class =
org.apache.log4j.spi.LoggingEvent missing constructors and public =
instance variable. Thanks to Gary Gregory.
	=E2=80=A2 LOG4J2-3328: Log4j 1.2 bridge does not support system =
properties in log4j.xml. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge now logs a warning instead of =
throwing an NullPointerException when building a Syslog appender with a =
missing "SyslogHost" param. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge should allow property and XML =
attributes to start with either an upper-case or lower-case letter. =
Thanks to Gary Gregory, Piotr P. Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge uses the wrong default values for a =
TTCCLayout #709. Thanks to Gary Gregory, Piotr P. Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge throws ClassCastException when =
using SimpleLayout and others #708. Thanks to Gary Gregory, Piotr P. =
Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge uses the wrong file pattern for =
rolling file appenders #710. Thanks to Gary Gregory, Piotr P. Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge throws ClassCastException when =
using SimpleLayout and others #708. Thanks to Gary Gregory, Piotr P. =
Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge creates a SocketAppender instead of =
a SyslogAppender. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge uses some incorrect default =
property values in some appenders. Thanks to Piotr P. Karwasz.
	=E2=80=A2 : Log4j 1.2 bridge supports the SocketAppender. Thanks =
to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing DefaultThrowableRenderer. =
Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing some ThrowableInformation =
constructors. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing some LocationInfo =
constructors. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missed Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missed =
org.apache.log4j.pattern.FormattingInfo. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missed =
org.apache.log4j.pattern.NameAbbreviator. Thanks to Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing UtilLoggingLevel. Thanks to =
Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing FormattingInfo. Thanks to =
Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing PatternConverter. Thanks to =
Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge missing PatternParser. Thanks to =
Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge issues with filters #753. Thanks to =
ppkarwasz, Gary Gregory.
	=E2=80=A2 : Log4j 1.2 bridge implements most of DOMConfigurator. =
Thanks to Gary Gregory.
	=E2=80=A2 : JndiManager reverts to 2.17.0 behavior: Read the =
system property for each call.
	=E2=80=A2 LOG4J2-3330: Configurator.setLevel not fetching the =
correct LoggerContext. Thanks to Mircea Lemnaru, Gary Gregory.
	=E2=80=A2 : Fix DTD error: Add missing ELEMENT for Marker.
	=E2=80=A2 : Fix log4j-jakarta-web service file #723. Thanks to =
Gary Gregory, Piotr P. Karwasz.
	=E2=80=A2 LOG4J2-3392: AppenderLoggingException logging any =
exception to a MongoDB Appender. Thanks to Gary Gregory, Omer U.
	=E2=80=A2 LOG4J2-3392: Possible NullPointerException in =
MongoDb4DocumentObject, MongoDbDocumentObject, DefaultNoSqlObject. =
Thanks to Gary Gregory.
	=E2=80=A2 : Trim whitespace before parsing a String into an =
Integer. Thanks to Gary Gregory.
	=E2=80=A2 LOG4J2-3410: Log4j 1.2 bridge throws a =
ClassCastException when logging a Map with non-String keys. Thanks to =
Barry Sham, Gary Gregory.
	=E2=80=A2 LOG4J2-3407: Log4j 1.2 bridge Check for non-existent =
appender when parsing properties #761. Thanks to Kenny MacLeod.
	=E2=80=A2 LOG4J2-3407: Log4j 1.2 bridge supports global =
threshold #764. Thanks to Piotr P. Karwasz.
Changes

	=E2=80=A2 LOG4J2-3267: Change modifier of method =
org.apache.logging.log4j.core.tools.Generate#generate to public (was =
package private) to facilitate automated code generation.
Apache Log4j 2.17.2 requires a minimum of Java 8 to build and run. Log4j =
2.12.4 is the last release to support Java 7. Log4j 2.3.2 is the last =
release to support Java 6. Java 6 and Java 7 are no 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:

https://logging.apache.org/log4j/2.x/=