Should this announcement also be sent to annou...@apache.org ? On Fri, Dec 10, 2021 at 7:08 PM Ralph Goers <ralph.go...@dslextreme.com> wrote:
> 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’s 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’s > 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=true > as a command line option or add log4j.formatMsgNoLookups=true 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: > > • 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. > • Support for Jakarta EE 9. This is functionally equivalent to > Log4j's log4j-web module but uses the Jakarta project. > • Various performance improvements. > > Key changes to note: > > • 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}. > • 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 > > • 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}'. > • LOG4J2-3194: Allow fractional attributes for size attribute of > SizeBsaedTriggeringPolicy. Thanks to markuss. > • LOG4J2-2978: Add support for Jakarta EE 9 (Tomcat 10 / Jetty 11) > Thanks to Michael Seele. > • LOG4J2-3189: Improve NameAbbreviator worst-case performance. > • LOG4J2-3170: Make CRLF/HTML encoding run in O(n) worst-case > time, rather than O(n^2). Thanks to Gareth Smith. > • 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. > • LOG4J2-2885: Add support for US-style date patterns and > micro/nano seconds to FixedDateTime. Thanks to Markus Spann. > • LOG4J2-3116: Add JsonTemplateLayout for Google Cloud Platform > structured logging layout. > • LOG4J2-3067: Add CounterResolver to JsonTemplateLayout. > • LOG4J2-3074: Add replacement parameter to > ReadOnlyStringMapResolver. > • LOG4J2-3051: Add CaseConverterResolver to JsonTemplateLayout. > • LOG4J2-3064: Add Arbiters and SpringProfile plugin. > • LOG4J2-3056: Refactor MD5 usage for sharing sensitive > information. Thanks to Marcono1234. > • LOG4J2-3004: Add plugin support to JsonTemplateLayout. > • LOG4J2-3050: Allow AdditionalFields to be ignored if their value > is null or a zero-length String. > • LOG4J2-3049: Allow MapMessage and ThreadContext attributes to be > prefixed. > • LOG4J2=3048: Add improved MapMessge support to GelfLayout. > • LOG4J2-3044: Add RepeatPatternConverter. > • 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. > • LOG4J2-2940: Add BasicAsyncLoggerContextSelector equivalent to > AsyncLoggerContextSelector for applications with a single LoggerContext. > This selector avoids classloader lookup overhead incurred by the existing > AsyncLoggerContextSelector. > • LOG4J2-3041: Allow a PatternSelector to be specified on > GelfLayout. > • LOG4J2-3141: Avoid ThreadLocal overhead in > RandomAccessFileAppender, RollingRandomAccessFileManager, and > MemoryMappedFileManager due to the unused setEndOfBatch and isEndOfBatch > methods. The methods on LogEvent are preferred. > • LOG4J2-3144: Prefer string.getBytes(Charset) over > string.getBytes(String) based on performance improvements in modern Java > releases. > • LOG4J2-3171: Improve PatternLayout performance by reducing > unnecessary indirection and branching. > Fixed Bugs > > • LOG4J2-3201: Limit the protocols JNDI can use by default. Limit > the servers and classes that can be accessed via LDAP. > • LOG4J2-3114: Enable immediate flush on RollingFileAppender when > buffered i/o is not enabled. Thanks to Barnabas Bodnar. > • LOG4J2-3168: Fix bug when file names contain regex characters. > Thanks to Benjamin Wöster. > • 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. > • LOG4J2-3060: Fix thread-safety issues in DefaultErrorHandler. > Thanks to Nikita Mikhailov. > • LOG4J2-3185: Fix thread-safety issues in DefaultErrorHandler. > Thanks to mzbonnt. > • LOG4J2-3183: Avoid using MutableInstant of the event as a cache > key in JsonTemplateLayout. > • LOG4J2-2829: SocketAppender should propagate failures when > reconnection fails. > • LOG4J2-3172: Buffer immutable log events in the SmtpManager. > Thanks to Barry Fleming. > • LOG4J2-3175: Avoid KafkaManager override when topics differ. > Thanks to wuqian0808. > • LOG4J2-3160: Fix documentation on how to toggle log4j2.debug > system property. Thanks to Lars Bohl. > • LOG4J2-3159: Fixed an unlikely race condition in > Log4jMarker.getParents() volatile access. > • LOG4J2-3153: DatePatternConverter performance is not impacted by > microsecond-precision clocks when such precision isn't required. > • LOG4J2-2808: LoggerContext skips resolving localhost when > hostName is configured. Thanks to Asapha Halifa. > • LOG4J2-3150: RandomAccessFile appender uses the correct default > buffer size of 256 kB rather than the default appender buffer size of 8 kB. > • LOG4J2-3142: log4j-1.2-api implements > LogEventAdapter.getTimestamp() based on the original event timestamp > instead of returning zero. Thanks to John Meikle. > • 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. > • LOG4J2-2816: Handle Disruptor event translation exceptions. > Thanks to Jacob Shields. > • LOG4J2-3121: log4j2 config modified at run-time may trigger > incomplete MBean re-initialization due to InstanceAlreadyExistsException. > Thanks to Markus Spann. > • LOG4J2-3107: SmtpManager.createManagerName ignores port. Thanks > to Markus Spann. > • LOG4J2-3080: Use SimpleMessage in Log4j 1 Category whenever > possible. > • 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. > • LOG4J2-3103: Fix race condition which can result in > ConcurrentModificationException on context.stop. Thanks to Mike Glazer. > • LOG4J2-3092: Fix JsonWriter memory leaks due to retained > excessive buffer growth. Thanks to xmh51. > • LOG4J2-3089: Fix sporadic > JsonTemplateLayoutNullEventDelimiterTest failures on Windows. Thanks to Tim > Perry. > • LOG4J2-3075: Fix formatting of nanoseconds in JsonTemplateLayout. > • LOG4J2-3087: Fix race in JsonTemplateLayout where a timestamp > could end up unquoted. Thanks to Anton Klarén. > • LOG4J2-3070: Ensure EncodingPatternConverter#handlesThrowable is > implemented. Thanks to Romain Manni-Bucau. > • LOG4J2-3054: BasicContextSelector hasContext and shutdown take > the default context into account > • LOG4J2-2940: Slf4j implementations walk the stack at most once > rather than twice to determine the caller's class loader. > • LOG4J2-2965: Fixed a deadlock between the > AsyncLoggerContextSelector and java.util.logging.LogManager by updating > Disruptor to 3.4.4. > • LOG4J2-3095: Category.setLevel should accept null value. Thanks > to Kenny MacLeod, Gary Gregory. > • LOG4J2-3174: Wrong subject on mail when it depends on the > LogEvent Thanks to romainmoreau. > Changes > > • : Update Spring framework to 5.3.13, Spring Boot to 2.5.7, and > Spring Cloud to 2020.0.4. > > • LOG4J2-2025: Provide support for overriding the Tomcat Log class > in Tomcat 8.5+. > > • : 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: