You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2020/11/12 23:04:28 UTC

[logging-log4j2] 04/05: Use lambdas.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 2b8a5ac373eba0fc1a5920c7fa18677ef66633ac
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Nov 12 18:03:45 2020 -0500

    Use lambdas.
---
 .../builders/appender/AsyncAppenderBuilder.java    |  2 +-
 .../builders/appender/ConsoleAppenderBuilder.java  |  2 +-
 .../appender/DailyRollingFileAppenderBuilder.java  |  2 +-
 .../builders/appender/FileAppenderBuilder.java     |  2 +-
 .../builders/appender/RewriteAppenderBuilder.java  |  2 +-
 .../appender/RollingFileAppenderBuilder.java       |  2 +-
 .../builders/appender/SyslogAppenderBuilder.java   |  2 +-
 .../builders/filter/LevelMatchFilterBuilder.java   |  2 +-
 .../builders/filter/LevelRangeFilterBuilder.java   |  2 +-
 .../builders/filter/StringMatchFilterBuilder.java  |  2 +-
 .../log4j/builders/layout/HtmlLayoutBuilder.java   |  2 +-
 .../log4j/builders/layout/TTCCLayoutBuilder.java   |  2 +-
 .../log4j/builders/layout/XmlLayoutBuilder.java    |  2 +-
 .../log4j/config/PropertiesConfiguration.java      |  4 +-
 .../org/apache/log4j/layout/Log4j1XmlLayout.java   | 19 ++++-----
 .../log4j/pattern/Log4j1MdcPatternConverter.java   |  7 +---
 .../org/apache/log4j/xml/XmlConfiguration.java     | 14 +++----
 .../apache/logging/log4j/core/ThreadedTest.java    | 23 ++++-------
 .../core/appender/MemoryMappedFileManager.java     | 17 ++++----
 .../log4j/core/appender/mom/JmsManager.java        | 16 +++-----
 .../core/appender/mom/kafka/KafkaManager.java      | 27 +++++-------
 .../core/appender/nosql/NoSqlDatabaseManager.java  | 15 +------
 .../core/async/AsyncLoggerConfigDisruptor.java     | 40 +++++-------------
 .../logging/log4j/core/async/DisruptorUtil.java    |  8 +---
 .../core/async/JCToolsBlockingQueueFactory.java    | 45 ++++++--------------
 .../logging/log4j/core/filter/RegexFilter.java     |  8 +---
 .../log4j/core/impl/JdkMapAdapterStringMap.java    | 24 ++++-------
 .../log4j/core/impl/ThreadContextDataInjector.java |  2 +-
 .../log4j/core/jackson/ContextDataSerializer.java  | 14 +++----
 .../log4j/core/pattern/MdcPatternConverter.java    | 11 ++---
 .../logging/log4j/core/script/ScriptManager.java   | 30 +++++---------
 .../logging/log4j/core/util/CachedClock.java       | 15 +++----
 .../logging/log4j/core/util/ClockFactory.java      | 12 +++---
 .../log4j/core/util/datetime/FastDateParser.java   |  7 +---
 .../log4j/core/GarbageCollectionHelper.java        | 27 ++++++------
 .../logging/log4j/core/GcFreeLoggingTestUtil.java  | 33 +++++++--------
 .../jdbc/AbstractJdbcAppenderDataSourceTest.java   |  9 +---
 .../jdbc/JdbcAppenderMapMessageDataSourceTest.java |  9 +---
 .../appender/mom/jeromq/JeroMqAppenderTest.java    |  9 ++--
 .../mom/kafka/KafkaAppenderCloseTimeoutTest.java   |  9 +---
 .../core/appender/mom/kafka/KafkaAppenderTest.java |  9 +---
 .../appender/nosql/NoSqlDatabaseManagerTest.java   | 16 +-------
 .../log4j/core/async/RingBufferLogEventTest.java   |  8 +---
 .../core/async/perftest/AbstractRunQueue.java      | 17 ++++----
 .../core/async/perftest/MultiThreadPerfTest.java   | 15 +++----
 .../core/impl/ThreadContextDataInjectorTest.java   |  7 +---
 .../ConcurrentLoggingWithJsonLayoutTest.java       |  7 +---
 .../appender/FlumePersistentAppenderTest.java      | 17 ++++----
 .../apache/logging/log4j/jmx/gui/ClientGui.java    | 48 +++++++++-------------
 .../ContextDataJsonAttributeConverter.java         |  9 +---
 .../org/apache/logging/log4j/jul/ApiLogger.java    |  9 ++--
 .../layout/template/json/util/JsonWriterTest.java  | 14 +------
 .../logging/log4j/perf/jmh/ClocksBenchmark.java    | 17 ++++----
 .../perf/jmh/FileAppenderThrowableBenchmark.java   | 21 ++++------
 .../perf/jmh/SortedArrayVsHashMapBenchmark.java    | 22 ++--------
 .../logging/log4j/perf/jmh/StackWalkBenchmark.java | 22 ++++------
 .../logging/log4j/perf/nogc/OpenHashStringMap.java | 33 +++++----------
 .../logging/log4j/web/WebLoggerContextUtils.java   | 17 ++++----
 .../log4j/web/Log4jWebInitializerImplTest.java     | 11 ++---
 .../apache/logging/log4j/web/TestAsyncServlet.java | 24 ++++-------
 60 files changed, 272 insertions(+), 551 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
index 92839f0..46a0b0c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/AsyncAppenderBuilder.java
@@ -70,7 +70,7 @@ public class AsyncAppenderBuilder extends AbstractBuilder implements AppenderBui
         Holder<Boolean> includeLocation = new BooleanHolder();
         Holder<String> level = new Holder<>("trace");
         Holder<Integer> bufferSize = new Holder<>(1024);
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case APPENDER_REF_TAG:
                     Appender appender = config.findAppenderByReference(currentElement);
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
index 83f417d..cd2328a 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/ConsoleAppenderBuilder.java
@@ -71,7 +71,7 @@ public class ConsoleAppenderBuilder extends AbstractBuilder implements AppenderB
         Holder<Layout> layout = new Holder<>();
         Holder<List<Filter>> filters = new Holder<>(new ArrayList<>());
         Holder<String> level = new Holder<>();
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
                     layout.set(config.parseLayout(currentElement));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
index 9f8db90..9115f29 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/DailyRollingFileAppenderBuilder.java
@@ -77,7 +77,7 @@ public class DailyRollingFileAppenderBuilder extends AbstractBuilder implements
         Holder<Boolean> append = new BooleanHolder();
         Holder<Boolean> bufferedIo = new BooleanHolder();
         Holder<Integer> bufferSize = new Holder<>(8192);
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
                     layout.set(config.parseLayout(currentElement));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
index 41d3820..e3be66d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/FileAppenderBuilder.java
@@ -71,7 +71,7 @@ public class FileAppenderBuilder extends AbstractBuilder implements AppenderBuil
         Holder<Boolean> append = new BooleanHolder();
         Holder<Boolean> bufferedIo = new BooleanHolder();
         Holder<Integer> bufferSize = new Holder<>(8192);
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
                     layout.set(config.parseLayout(currentElement));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
index f6526ee..b06973c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RewriteAppenderBuilder.java
@@ -72,7 +72,7 @@ public class RewriteAppenderBuilder extends AbstractBuilder implements AppenderB
         Holder<RewritePolicy> rewritePolicyHolder = new Holder<>();
         Holder<String> level = new Holder<>();
         Holder<Filter> filter = new Holder<>();
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case APPENDER_REF_TAG:
                     Appender appender = config.findAppenderByReference(currentElement);
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
index 04b7e7f..6f04f88 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
@@ -80,7 +80,7 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
         Holder<String> maxSize = new Holder<>();
         Holder<String> maxBackups = new Holder<>();
         Holder<String> level = new Holder<>();
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
                     layout.set(config.parseLayout(currentElement));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
index d449cac..2f353ac 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/SyslogAppenderBuilder.java
@@ -73,7 +73,7 @@ public class SyslogAppenderBuilder extends AbstractBuilder implements AppenderBu
         Holder<String> facility = new Holder<>();
         Holder<String> level = new Holder<>();
         Holder<String> host = new Holder<>();
-        forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+        forEachElement(appenderElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case LAYOUT_TAG:
                     layout.set(config.parseLayout(currentElement));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
index d7f85bb..f377a77 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelMatchFilterBuilder.java
@@ -57,7 +57,7 @@ public class LevelMatchFilterBuilder extends AbstractBuilder implements FilterBu
     public Filter parseFilter(Element filterElement, XmlConfiguration config) {
         final Holder<String> level = new Holder<>();
         final Holder<Boolean> acceptOnMatch = new BooleanHolder();
-        forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+        forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
             if (currentElement.getTagName().equals("param")) {
                 switch (currentElement.getAttribute(NAME_ATTR)) {
                     case LEVEL:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
index 43ce0ec..5033089 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/LevelRangeFilterBuilder.java
@@ -59,7 +59,7 @@ public class LevelRangeFilterBuilder extends AbstractBuilder implements FilterBu
         final Holder<String> levelMax = new Holder<>();
         final Holder<String> levelMin = new Holder<>();
         final Holder<Boolean> acceptOnMatch = new BooleanHolder();
-        forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+        forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
             if (currentElement.getTagName().equals("param")) {
                 switch (currentElement.getAttribute(NAME_ATTR)) {
                     case LEVEL_MAX:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
index 877acbe..781c9e4 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/filter/StringMatchFilterBuilder.java
@@ -46,7 +46,7 @@ public class StringMatchFilterBuilder extends AbstractBuilder implements FilterB
     public Filter parseFilter(Element filterElement, XmlConfiguration config) {
         final Holder<Boolean> acceptOnMatch = new BooleanHolder();
         final Holder<String> text = new Holder<>();
-        forEachElement(filterElement.getElementsByTagName("param"), (currentElement) -> {
+        forEachElement(filterElement.getElementsByTagName("param"), currentElement -> {
             if (currentElement.getTagName().equals("param")) {
                 switch (currentElement.getAttribute(NAME_ATTR)) {
                     case STRING_TO_MATCH:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
index 5f70a7b..7141dec 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/HtmlLayoutBuilder.java
@@ -57,7 +57,7 @@ public class HtmlLayoutBuilder extends AbstractBuilder implements LayoutBuilder
     public Layout parseLayout(Element layoutElement, XmlConfiguration config) {
         final Holder<String> title = new Holder<>();
         final Holder<Boolean> locationInfo = new BooleanHolder();
-        forEachElement(layoutElement.getElementsByTagName("param"), (currentElement) -> {
+        forEachElement(layoutElement.getElementsByTagName("param"), currentElement -> {
             if (currentElement.getTagName().equals(PARAM_TAG)) {
                 if (TITLE.equalsIgnoreCase(currentElement.getAttribute("name"))) {
                     title.set(currentElement.getAttribute("value"));
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
index 583f8b7..e09a09a 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/TTCCLayoutBuilder.java
@@ -63,7 +63,7 @@ public class TTCCLayoutBuilder extends AbstractBuilder implements LayoutBuilder
         final Holder<Boolean> contextPrinting = new BooleanHolder();
         final Holder<String> dateFormat = new Holder<>();
         final Holder<String> timezone = new Holder<>();
-        forEachElement(layoutElement.getElementsByTagName("param"), (currentElement) -> {
+        forEachElement(layoutElement.getElementsByTagName("param"), currentElement -> {
             if (currentElement.getTagName().equals(PARAM_TAG)) {
                 switch (currentElement.getAttribute(NAME_ATTR)) {
                     case THREAD_PRINTING_PARAM:
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java
index 89d2dca..5c13875 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/layout/XmlLayoutBuilder.java
@@ -58,7 +58,7 @@ public class XmlLayoutBuilder extends AbstractBuilder implements LayoutBuilder {
     public Layout parseLayout(Element layoutElement, XmlConfiguration config) {
         final Holder<Boolean> properties = new BooleanHolder();
         final Holder<Boolean> locationInfo = new BooleanHolder();
-        forEachElement(layoutElement.getElementsByTagName(PARAM_TAG), (currentElement) -> {
+        forEachElement(layoutElement.getElementsByTagName(PARAM_TAG), currentElement -> {
             if (PROPERTIES.equalsIgnoreCase(currentElement.getAttribute("name"))) {
                 properties.set(Boolean.parseBoolean(currentElement.getAttribute("value")));
             } else if (LOCATION_INFO.equalsIgnoreCase(currentElement.getAttribute("name"))) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
index dd72c9b..fd5a749 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/PropertiesConfiguration.java
@@ -485,7 +485,7 @@ public class PropertiesConfiguration  extends Log4j1Configuration {
 
     public void addProperties(final Object obj, final String[] keys, final Properties props, final String prefix) {
         final Properties edited = new Properties();
-        props.stringPropertyNames().stream().filter((name) -> {
+        props.stringPropertyNames().stream().filter(name -> {
             if (name.startsWith(prefix)) {
                 for (String key : keys) {
                     if (name.equals(key)) {
@@ -495,7 +495,7 @@ public class PropertiesConfiguration  extends Log4j1Configuration {
                 return true;
             }
             return false;
-        }).forEach((name) -> edited.put(name, props.getProperty(name)));
+        }).forEach(name -> edited.put(name, props.getProperty(name)));
         PropertySetter.setProperties(obj, edited, prefix + ".");
     }
 
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
index 9522b9e..ecdd0b5 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
@@ -20,6 +20,7 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
@@ -30,7 +31,6 @@ import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout;
 import org.apache.logging.log4j.core.layout.ByteBufferDestination;
 import org.apache.logging.log4j.core.util.Transform;
-import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.util.Strings;
 
@@ -137,16 +137,13 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
             final ReadOnlyStringMap contextMap = event.getContextData();
             if (!contextMap.isEmpty()) {
                 buf.append("<log4j:properties>\r\n");
-                contextMap.forEach(new BiConsumer<String, String>() {
-                    @Override
-                    public void accept(final String key, final String val) {
-                        if (val != null) {
-                            buf.append("<log4j:data name=\"");
-                            buf.append(Transform.escapeHtmlTags(key));
-                            buf.append("\" value=\"");
-                            buf.append(Transform.escapeHtmlTags(val));
-                            buf.append("\"/>\r\n");
-                        }
+                contextMap.forEach((key, val) -> {
+                    if (val != null) {
+                        buf.append("<log4j:data name=\"");
+                        buf.append(Transform.escapeHtmlTags(key));
+                        buf.append("\" value=\"");
+                        buf.append(Transform.escapeHtmlTags(Objects.toString(val, null)));
+                        buf.append("\"/>\r\n");
                     }
                 });
                 buf.append("</log4j:properties>\r\n");
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
index b4ae0c5..a70c28d 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1MdcPatternConverter.java
@@ -79,10 +79,5 @@ public final class Log4j1MdcPatternConverter extends LogEventPatternConverter {
         }
     }
 
-    private static TriConsumer<String, Object, StringBuilder> APPEND_EACH = new TriConsumer<String, Object, StringBuilder>() {
-        @Override
-        public void accept(final String key, final Object value, final StringBuilder toAppendTo) {
-            toAppendTo.append('{').append(key).append(',').append(value).append('}');
-        }
-    };
+    private static TriConsumer<String, Object, StringBuilder> APPEND_EACH = (key, value, toAppendTo) -> toAppendTo.append('{').append(key).append(',').append(value).append('}');
 }
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
index d95e185..cbf1551 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/XmlConfiguration.java
@@ -353,7 +353,7 @@ public class XmlConfiguration extends Log4j1Configuration {
             PropertySetter propSetter = new PropertySetter(appender);
 
             appender.setName(subst(appenderElement.getAttribute(NAME_ATTR)));
-            forEachElement(appenderElement.getChildNodes(), (currentElement) -> {
+            forEachElement(appenderElement.getChildNodes(), currentElement -> {
                 // Parse appender parameters
                 switch (currentElement.getTagName()) {
                     case PARAM_TAG:
@@ -427,7 +427,7 @@ public class XmlConfiguration extends Log4j1Configuration {
             RewritePolicy policy = LoaderUtil.newInstanceOf(className);
             PropertySetter propSetter = new PropertySetter(policy);
 
-            forEachElement(element.getChildNodes(), (currentElement) -> {
+            forEachElement(element.getChildNodes(), currentElement -> {
                 if (currentElement.getTagName().equalsIgnoreCase(PARAM_TAG)) {
                     setParameter(currentElement, propSetter);
                 }
@@ -462,7 +462,7 @@ public class XmlConfiguration extends Log4j1Configuration {
             eh.setAppender(appender);
 
             PropertySetter propSetter = new PropertySetter(eh);
-            forEachElement(element.getChildNodes(), (currentElement) -> {
+            forEachElement(element.getChildNodes(), currentElement -> {
                 String tagName = currentElement.getTagName();
                 if (tagName.equals(PARAM_TAG)) {
                     setParameter(currentElement, propSetter);
@@ -482,7 +482,7 @@ public class XmlConfiguration extends Log4j1Configuration {
         Filter filter = manager.parseFilter(className, filterElement, this);
         if (filter == null) {
             PropertySetter propSetter = new PropertySetter(filter);
-            forEachElement(filterElement.getChildNodes(), (currentElement) -> {
+            forEachElement(filterElement.getChildNodes(), currentElement -> {
                 String tagName = currentElement.getTagName();
                 if (tagName.equals(PARAM_TAG)) {
                     setParameter(currentElement, propSetter);
@@ -527,7 +527,7 @@ public class XmlConfiguration extends Log4j1Configuration {
 
         final PropertySetter propSetter = new PropertySetter(loggerConfig);
         loggerConfig.getAppenderRefs().clear();
-        forEachElement(catElement.getChildNodes(), (currentElement) -> {
+        forEachElement(catElement.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case APPENDER_REF_TAG: {
                     Appender appender = findAppenderByReference(currentElement);
@@ -574,7 +574,7 @@ public class XmlConfiguration extends Log4j1Configuration {
         try {
             Layout layout = LoaderUtil.newInstanceOf(className);
             PropertySetter propSetter = new PropertySetter(layout);
-            forEachElement(layout_element.getChildNodes(), (currentElement) -> {
+            forEachElement(layout_element.getChildNodes(), currentElement -> {
                 String tagName = currentElement.getTagName();
                 if (tagName.equals(PARAM_TAG)) {
                     setParameter(currentElement, propSetter);
@@ -696,7 +696,7 @@ public class XmlConfiguration extends Log4j1Configuration {
         final StatusConfiguration statusConfig = new StatusConfiguration().withStatus(status);
         statusConfig.initialize();
 
-        forEachElement(element.getChildNodes(), (currentElement) -> {
+        forEachElement(element.getChildNodes(), currentElement -> {
             switch (currentElement.getTagName()) {
                 case CATEGORY: case LOGGER_ELEMENT:
                     parseCategory(currentElement);
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/ThreadedTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/ThreadedTest.java
index 3df298a..9038209 100644
--- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/ThreadedTest.java
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/ThreadedTest.java
@@ -29,8 +29,6 @@ import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
 /**
@@ -50,20 +48,15 @@ public class ThreadedTest {
 
     // this would look pretty sweet with lambdas
     @ClassRule
-    public static RuleChain chain = RuleChain.outerRule(new TestRule() {
+    public static RuleChain chain = RuleChain.outerRule((base, description) -> new Statement() {
         @Override
-        public Statement apply(final Statement base, final Description description) {
-            return new Statement() {
-                @Override
-                public void evaluate() throws Throwable {
-                    deleteDir();
-                    try {
-                        base.evaluate();
-                    } finally {
-                        deleteDir();
-                    }
-                }
-            };
+        public void evaluate() throws Throwable {
+            deleteDir();
+            try {
+                base.evaluate();
+            } finally {
+                deleteDir();
+            }
         }
     }).around(context);
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
index 7d5fd8d..d8d9ced 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
@@ -213,16 +213,13 @@ public class MemoryMappedFileManager extends OutputStreamManager {
     private static void unsafeUnmap(final MappedByteBuffer mbb) throws PrivilegedActionException {
         LOGGER.debug("MMapAppender unmapping old buffer...");
         final long startNanos = System.nanoTime();
-        AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
-            @Override
-            public Object run() throws Exception {
-                final Method getCleanerMethod = mbb.getClass().getMethod("cleaner");
-                getCleanerMethod.setAccessible(true);
-                final Object cleaner = getCleanerMethod.invoke(mbb); // sun.misc.Cleaner instance
-                final Method cleanMethod = cleaner.getClass().getMethod("clean");
-                cleanMethod.invoke(cleaner);
-                return null;
-            }
+        AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
+            final Method getCleanerMethod = mbb.getClass().getMethod("cleaner");
+            getCleanerMethod.setAccessible(true);
+            final Object cleaner = getCleanerMethod.invoke(mbb); // sun.misc.Cleaner instance
+            final Method cleanMethod = cleaner.getClass().getMethod("clean");
+            cleanMethod.invoke(cleaner);
+            return null;
         });
         final float millis = (float) ((System.nanoTime() - startNanos) / NANOS_PER_MILLISEC);
         LOGGER.debug("MMapAppender unmapped buffer OK in {} millis", millis);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
index 959f468..5625923 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
@@ -40,7 +40,6 @@ import org.apache.logging.log4j.core.appender.ManagerFactory;
 import org.apache.logging.log4j.core.net.JndiManager;
 import org.apache.logging.log4j.core.util.Log4jThread;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.util.BiConsumer;
 
 /**
  * Consider this class <b>private</b>; it is only <b>public</b> for access by integration tests.
@@ -417,15 +416,12 @@ public class JmsManager extends AbstractManager {
     private MapMessage map(final org.apache.logging.log4j.message.MapMessage<?, ?> log4jMapMessage,
             final MapMessage jmsMapMessage) {
         // Map without calling org.apache.logging.log4j.message.MapMessage#getData() which makes a copy of the map.
-        log4jMapMessage.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String key, final Object value) {
-                try {
-                    jmsMapMessage.setObject(key, value);
-                } catch (final JMSException e) {
-                    throw new IllegalArgumentException(String.format("%s mapping key '%s' to value '%s': %s",
-                            e.getClass(), key, value, e.getLocalizedMessage()), e);
-                }
+        log4jMapMessage.forEach((key, value) -> {
+            try {
+                jmsMapMessage.setObject(key, value);
+            } catch (final JMSException e) {
+                throw new IllegalArgumentException(String.format("%s mapping key '%s' to value '%s': %s",
+                        e.getClass(), key, value, e.getLocalizedMessage()), e);
             }
         });
         return jmsMapMessage;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
index 394cef0..547b061 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
@@ -25,7 +25,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.kafka.clients.producer.Callback;
 import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.clients.producer.RecordMetadata;
@@ -90,14 +89,11 @@ public class KafkaManager extends AbstractManager {
 		if (producer != null) {
 			// This thread is a workaround for this Kafka issue:
 			// https://issues.apache.org/jira/browse/KAFKA-1660
-			final Thread closeThread = new Log4jThread(new Runnable() {
-				@Override
-				public void run() {
-					if (producer != null) {
-						producer.close();
-					}
-				}
-			}, "KafkaManager-CloseThread");
+			final Thread closeThread = new Log4jThread(() -> {
+            	if (producer != null) {
+            		producer.close();
+            	}
+            }, "KafkaManager-CloseThread");
 			closeThread.setDaemon(true); // avoid blocking JVM shutdown
 			closeThread.start();
 			try {
@@ -125,14 +121,11 @@ public class KafkaManager extends AbstractManager {
 				final Future<RecordMetadata> response = producer.send(newRecord);
 				response.get(timeoutMillis, TimeUnit.MILLISECONDS);
 			} else {
-				producer.send(newRecord, new Callback() {
-					@Override
-					public void onCompletion(final RecordMetadata metadata, final Exception e) {
-						if (e != null) {
-							LOGGER.error("Unable to write to Kafka in appender [" + getName() + "]", e);
-						}
-					}
-				});
+				producer.send(newRecord, (metadata, e) -> {
+                	if (e != null) {
+                		LOGGER.error("Unable to write to Kafka in appender [" + getName() + "]", e);
+                	}
+                });
 			}
 		}
 	}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
index 14322e3..b270ef1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
@@ -26,7 +26,6 @@ import org.apache.logging.log4j.core.appender.ManagerFactory;
 import org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager;
 import org.apache.logging.log4j.core.util.Closer;
 import org.apache.logging.log4j.message.MapMessage;
-import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.ReadOnlyStringMap;
 
 /**
@@ -86,12 +85,7 @@ public final class NoSqlDatabaseManager<W> extends AbstractDatabaseManager {
 
     private void setFields(final MapMessage<?, ?> mapMessage, final NoSqlObject<W> noSqlObject) {
         // Map without calling org.apache.logging.log4j.message.MapMessage#getData() which makes a copy of the map.
-        mapMessage.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String key, final Object value) {
-                noSqlObject.set(key, value);
-            }
-        });
+        mapMessage.forEach((key, value) -> noSqlObject.set(key, value));
     }
 
     private void setFields(final LogEvent event, final NoSqlObject<W> entity) {
@@ -147,12 +141,7 @@ public final class NoSqlDatabaseManager<W> extends AbstractDatabaseManager {
             entity.set("contextMap", (Object) null);
         } else {
             final NoSqlObject<W> contextMapEntity = this.connection.createObject();
-            contextMap.forEach(new BiConsumer<String, String>() {
-                @Override
-                public void accept(final String key, final String val) {
-                    contextMapEntity.set(key, val);
-                }
-            });
+            contextMap.forEach((key, val) -> contextMapEntity.set(key, val));
             entity.set("contextMap", contextMapEntity);
         }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
index 252cd28..88e93e6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
@@ -131,51 +131,31 @@ public class AsyncLoggerConfigDisruptor extends AbstractLifeCycle implements Asy
      * Factory used to populate the RingBuffer with events. These event objects are then re-used during the life of the
      * RingBuffer.
      */
-    private static final EventFactory<Log4jEventWrapper> FACTORY = new EventFactory<Log4jEventWrapper>() {
-        @Override
-        public Log4jEventWrapper newInstance() {
-            return new Log4jEventWrapper();
-        }
-    };
+    private static final EventFactory<Log4jEventWrapper> FACTORY = Log4jEventWrapper::new;
 
     /**
      * Factory used to populate the RingBuffer with events. These event objects are then re-used during the life of the
      * RingBuffer.
      */
-    private static final EventFactory<Log4jEventWrapper> MUTABLE_FACTORY = new EventFactory<Log4jEventWrapper>() {
-        @Override
-        public Log4jEventWrapper newInstance() {
-            return new Log4jEventWrapper(new MutableLogEvent());
-        }
-    };
+    private static final EventFactory<Log4jEventWrapper> MUTABLE_FACTORY = () -> new Log4jEventWrapper(new MutableLogEvent());
 
     /**
      * Object responsible for passing on data to a specific RingBuffer event.
      */
     private static final EventTranslatorTwoArg<Log4jEventWrapper, LogEvent, AsyncLoggerConfig> TRANSLATOR =
-            new EventTranslatorTwoArg<Log4jEventWrapper, LogEvent, AsyncLoggerConfig>() {
-
-        @Override
-        public void translateTo(final Log4jEventWrapper ringBufferElement, final long sequence,
-                final LogEvent logEvent, final AsyncLoggerConfig loggerConfig) {
-            ringBufferElement.event = logEvent;
-            ringBufferElement.loggerConfig = loggerConfig;
-        }
-    };
+            (ringBufferElement, sequence, logEvent, loggerConfig) -> {
+         ringBufferElement.event = logEvent;
+         ringBufferElement.loggerConfig = loggerConfig;
+      };
 
     /**
      * Object responsible for passing on data to a RingBuffer event with a MutableLogEvent.
      */
     private static final EventTranslatorTwoArg<Log4jEventWrapper, LogEvent, AsyncLoggerConfig> MUTABLE_TRANSLATOR =
-            new EventTranslatorTwoArg<Log4jEventWrapper, LogEvent, AsyncLoggerConfig>() {
-
-        @Override
-        public void translateTo(final Log4jEventWrapper ringBufferElement, final long sequence,
-                final LogEvent logEvent, final AsyncLoggerConfig loggerConfig) {
-            ((MutableLogEvent) ringBufferElement.event).initFrom(logEvent);
-            ringBufferElement.loggerConfig = loggerConfig;
-        }
-    };
+            (ringBufferElement, sequence, logEvent, loggerConfig) -> {
+         ((MutableLogEvent) ringBufferElement.event).initFrom(logEvent);
+         ringBufferElement.loggerConfig = loggerConfig;
+      };
 
     private int ringBufferSize;
     private AsyncQueueFullPolicy asyncQueueFullPolicy;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
index 5925187..e344005 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
@@ -17,7 +17,6 @@
 
 package org.apache.logging.log4j.core.async;
 
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
@@ -160,12 +159,7 @@ final class DisruptorUtil {
      * @return the thread ID of the background appender thread
      */
     public static long getExecutorThreadId(final ExecutorService executor) {
-        final Future<Long> result = executor.submit(new Callable<Long>() {
-            @Override
-            public Long call() {
-                return Thread.currentThread().getId();
-            }
-        });
+        final Future<Long> result = executor.submit(() -> Thread.currentThread().getId());
         try {
             return result.get();
         } catch (final Exception ex) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
index facc59e..6a203ca 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.java
@@ -71,12 +71,7 @@ public class JCToolsBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
 
         @Override
         public int drainTo(final Collection<? super E> c, final int maxElements) {
-            return drain(new Consumer<E>() {
-                @Override
-                public void accept(final E e) {
-                    c.add(e);
-                }
-            }, maxElements);
+            return drain(e -> c.add(e), maxElements);
         }
 
         @Override
@@ -148,36 +143,22 @@ public class JCToolsBlockingQueueFactory<E> implements BlockingQueueFactory<E> {
     }
 
     public enum WaitStrategy {
-        SPIN(new Idle() {
-            @Override
-            public int idle(final int idleCounter) {
-                return idleCounter + 1;
-            }
+        SPIN(idleCounter -> idleCounter + 1),
+        YIELD(idleCounter -> {
+            Thread.yield();
+            return idleCounter + 1;
         }),
-        YIELD(new Idle() {
-            @Override
-            public int idle(final int idleCounter) {
-                Thread.yield();
-                return idleCounter + 1;
-            }
+        PARK(idleCounter -> {
+            LockSupport.parkNanos(1L);
+            return idleCounter + 1;
         }),
-        PARK(new Idle() {
-            @Override
-            public int idle(final int idleCounter) {
+        PROGRESSIVE(idleCounter -> {
+            if (idleCounter > 200) {
                 LockSupport.parkNanos(1L);
-                return idleCounter + 1;
-            }
-        }),
-        PROGRESSIVE(new Idle() {
-            @Override
-            public int idle(final int idleCounter) {
-                if (idleCounter > 200) {
-                    LockSupport.parkNanos(1L);
-                } else if (idleCounter > 100) {
-                    Thread.yield();
-                }
-                return idleCounter + 1;
+            } else if (idleCounter > 100) {
+                Thread.yield();
             }
+            return idleCounter + 1;
         });
 
         private final Idle idle;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
index 488b772..eafaef1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
@@ -142,13 +142,7 @@ public final class RegexFilter extends AbstractFilter {
             return DEFAULT_PATTERN_FLAGS;
         }
         final Field[] fields = Pattern.class.getDeclaredFields();
-        final Comparator<Field> comparator = new Comparator<Field>() {
-
-            @Override
-            public int compare(final Field f1, final Field f2) {
-                return f1.getName().compareTo(f2.getName());
-            }
-        };
+        final Comparator<Field> comparator = (f1, f2) -> f1.getName().compareTo(f2.getName());
         Arrays.sort(fields, comparator);
         final String[] fieldNames = new String[fields.length];
         for (int i = 0; i < fields.length; i++) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
index e86e4d6..b45ba19 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
@@ -33,17 +33,14 @@ import org.apache.logging.log4j.util.TriConsumer;
 public class JdkMapAdapterStringMap implements StringMap {
     private static final long serialVersionUID = -7348247784983193612L;
     private static final String FROZEN = "Frozen collection cannot be modified";
-    private static final Comparator<? super String> NULL_FIRST_COMPARATOR = new Comparator<String>() {
-        @Override
-        public int compare(final String left, final String right) {
-            if (left == null) {
-                return -1;
-            }
-            if (right == null) {
-                return 1;
-            }
-            return left.compareTo(right);
+    private static final Comparator<? super String> NULL_FIRST_COMPARATOR = (left, right) -> {
+        if (left == null) {
+            return -1;
+        }
+        if (right == null) {
+            return 1;
         }
+        return left.compareTo(right);
     };
 
     private final Map<String, String> map;
@@ -143,12 +140,7 @@ public class JdkMapAdapterStringMap implements StringMap {
         sortedKeys = null;
     }
 
-    private static TriConsumer<String, String, Map<String, String>> PUT_ALL = new TriConsumer<String, String, Map<String, String>>() {
-        @Override
-        public void accept(final String key, final String value, final Map<String, String> stringStringMap) {
-            stringStringMap.put(key, value);
-        }
-    };
+    private static TriConsumer<String, String, Map<String, String>> PUT_ALL = (key, value, stringStringMap) -> stringStringMap.put(key, value);
 
     @Override
     public void putValue(final String key, final Object value) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
index 89623cd..fe0936c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
@@ -83,7 +83,7 @@ public class ThreadContextDataInjector {
         for (final ClassLoader classLoader : LoaderUtil.getClassLoaders()) {
             try {
                 for (final ContextDataProvider provider : ServiceLoader.load(ContextDataProvider.class, classLoader)) {
-                    if (providers.stream().noneMatch((p) -> p.getClass().isAssignableFrom(provider.getClass()))) {
+                    if (providers.stream().noneMatch(p -> p.getClass().isAssignableFrom(provider.getClass()))) {
                         providers.add(provider);
                     }
                 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
index 8808d3d..7ac40f0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
@@ -50,15 +50,11 @@ public class ContextDataSerializer extends StdSerializer<ReadOnlyStringMap> {
     }
 
     private static final TriConsumer<String, Object, JsonGenerator> WRITE_STRING_FIELD_INTO =
-            new TriConsumer<String, Object, JsonGenerator>() {
-
-        @Override
-        public void accept(final String key, final Object value, final JsonGenerator jsonGenerator) {
-            try {
-                jsonGenerator.writeStringField(key, String.valueOf(value));
-            } catch (final Exception ex) {
-                throw new IllegalStateException("Problem with key " + key, ex);
-            }
+            (key, value, jsonGenerator) -> {
+        try {
+            jsonGenerator.writeStringField(key, String.valueOf(value));
+        } catch (final Exception ex) {
+            throw new IllegalStateException("Problem with key " + key, ex);
         }
     };
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
index b39c15e..95cb512 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
@@ -78,13 +78,10 @@ public final class MdcPatternConverter extends LogEventPatternConverter {
         return new MdcPatternConverter(options);
     }
 
-    private static final TriConsumer<String, Object, StringBuilder> WRITE_KEY_VALUES_INTO = new TriConsumer<String, Object, StringBuilder>() {
-        @Override
-        public void accept(final String key, final Object value, final StringBuilder sb) {
-            sb.append(key).append('=');
-            StringBuilders.appendValue(sb, value);
-            sb.append(", ");
-        }
+    private static final TriConsumer<String, Object, StringBuilder> WRITE_KEY_VALUES_INTO = (key, value, sb) -> {
+        sb.append(key).append('=');
+        StringBuilders.appendValue(sb, value);
+        sb.append(", ");
     };
 
     /**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
index a167aa4..f9790af 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
@@ -171,12 +171,7 @@ public class ScriptManager implements FileWatcher, Serializable {
             logger.warn("No script named {} could be found");
             return null;
         }
-        return AccessController.doPrivileged(new PrivilegedAction<Object>() {
-            @Override
-            public Object run() {
-                return scriptRunner.execute(bindings);
-            }
-        });
+        return AccessController.doPrivileged((PrivilegedAction<Object>) () -> scriptRunner.execute(bindings));
     }
 
     private interface ScriptRunner {
@@ -201,19 +196,16 @@ public class ScriptManager implements FileWatcher, Serializable {
             CompiledScript compiled = null;
             if (scriptEngine instanceof Compilable) {
                 logger.debug("Script {} is compilable", script.getName());
-                compiled = AccessController.doPrivileged(new PrivilegedAction<CompiledScript>() {
-                    @Override
-                    public CompiledScript run() {
-                        try {
-                            return ((Compilable) scriptEngine).compile(script.getScriptText());
-                        } catch (final Throwable ex) {
-                            /*
-                             * ScriptException is what really should be caught here. However, beanshell's ScriptEngine
-                             * implements Compilable but then throws Error when the compile method is called!
-                             */
-                            logger.warn("Error compiling script", ex);
-                            return null;
-                        }
+                compiled = AccessController.doPrivileged((PrivilegedAction<CompiledScript>) () -> {
+                    try {
+                        return ((Compilable) scriptEngine).compile(script.getScriptText());
+                    } catch (final Throwable ex) {
+                        /*
+                         * ScriptException is what really should be caught here. However, beanshell's ScriptEngine
+                         * implements Compilable but then throws Error when the compile method is called!
+                         */
+                        logger.warn("Error compiling script", ex);
+                        return null;
                     }
                 });
             }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
index f6d51ab..132ea70 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/CachedClock.java
@@ -34,16 +34,13 @@ public final class CachedClock implements Clock {
     private short count = 0;
 
     private CachedClock() {
-        final Thread updater = new Log4jThread(new Runnable() {
-            @Override
-            public void run() {
-                while (true) {
-                    final long time = System.currentTimeMillis();
-                    millis = time;
+        final Thread updater = new Log4jThread(() -> {
+            while (true) {
+                final long time = System.currentTimeMillis();
+                millis = time;
 
-                    // avoid explicit dependency on sun.misc.Util
-                    LockSupport.parkNanos(1000 * 1000);
-                }
+                // avoid explicit dependency on sun.misc.Util
+                LockSupport.parkNanos(1000 * 1000);
             }
         }, "CachedClock Updater Thread");
         updater.setDaemon(true);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ClockFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ClockFactory.java
index 01a448a..d43e713 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ClockFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/ClockFactory.java
@@ -69,12 +69,12 @@ public final class ClockFactory {
 
     private static Map<String, Supplier<Clock>> aliases() {
         final Map<String, Supplier<Clock>> result = new HashMap<>();
-        result.put("SystemClock",       new Supplier<Clock>() { @Override public Clock get() { return new SystemClock(); } });
-        result.put("SystemMillisClock", new Supplier<Clock>() { @Override public Clock get() { return new SystemMillisClock(); } });
-        result.put("CachedClock",       new Supplier<Clock>() { @Override public Clock get() { return CachedClock.instance(); } });
-        result.put("CoarseCachedClock", new Supplier<Clock>() { @Override public Clock get() { return CoarseCachedClock.instance(); } });
-        result.put("org.apache.logging.log4j.core.util.CachedClock", new Supplier<Clock>() { @Override public Clock get() { return CachedClock.instance(); } });
-        result.put("org.apache.logging.log4j.core.util.CoarseCachedClock", new Supplier<Clock>() { @Override public Clock get() { return CoarseCachedClock.instance(); } });
+        result.put("SystemClock",       SystemClock::new);
+        result.put("SystemMillisClock", SystemMillisClock::new);
+        result.put("CachedClock",       CachedClock::instance);
+        result.put("CoarseCachedClock", CoarseCachedClock::instance);
+        result.put("org.apache.logging.log4j.core.util.CachedClock", CachedClock::instance);
+        result.put("org.apache.logging.log4j.core.util.CoarseCachedClock", CoarseCachedClock::instance);
         return result;
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateParser.java
index 05ea9fd..6dcd9a7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDateParser.java
@@ -98,12 +98,7 @@ public class FastDateParser implements DateParser, Serializable {
     // comparator used to sort regex alternatives
     // alternatives should be ordered longer first, and shorter last. ('february' before 'feb')
     // all entries must be lowercase by locale.
-    private static final Comparator<String> LONGER_FIRST_LOWERCASE = new Comparator<String>() {
-        @Override
-        public int compare(final String left, final String right) {
-            return right.compareTo(left);
-        }
-    };
+    private static final Comparator<String> LONGER_FIRST_LOWERCASE = (left, right) -> right.compareTo(left);
 
     /**
      * <p>Constructs a new FastDateParser.</p>
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GarbageCollectionHelper.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/GarbageCollectionHelper.java
index 3f67362..33ac01e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GarbageCollectionHelper.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/GarbageCollectionHelper.java
@@ -31,23 +31,20 @@ public final class GarbageCollectionHelper implements Closeable, Runnable {
     private static final OutputStream sink = ByteStreams.nullOutputStream();
     private final AtomicBoolean running = new AtomicBoolean();
     private final CountDownLatch latch = new CountDownLatch(1);
-    private final Thread gcThread = new Thread(new Runnable() {
-        @Override
-        public void run() {
-            try {
-                while (running.get()) {
-                    // Allocate data to help suggest a GC
-                    try {
-                        // 1mb of heap
-                        sink.write(new byte[1024 * 1024]);
-                    } catch (final IOException ignored) {
-                    }
-                    // May no-op depending on the JVM configuration
-                    System.gc();
+    private final Thread gcThread = new Thread(() -> {
+        try {
+            while (running.get()) {
+                // Allocate data to help suggest a GC
+                try {
+                    // 1mb of heap
+                    sink.write(new byte[1024 * 1024]);
+                } catch (final IOException ignored) {
                 }
-            } finally {
-                latch.countDown();
+                // May no-op depending on the JVM configuration
+                System.gc();
             }
+        } finally {
+            latch.countDown();
         }
     });
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
index 72d49e1..f505fdb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
@@ -81,26 +81,23 @@ public enum GcFreeLoggingTestUtil {;
                 "com/google/monitoring/runtime/instrumentation/Sampler", //
         };
         final AtomicBoolean samplingEnabled = new AtomicBoolean(true);
-        final Sampler sampler = new Sampler() {
-            @Override
-            public void sampleAllocation(final int count, final String desc, final Object newObj, final long size) {
-                if (!samplingEnabled.get()) {
-                    return;
-                }
-                for (int i = 0; i < exclude.length; i++) {
-                    if (exclude[i].equals(desc)) {
-                        return; // exclude
-                    }
-                }
-                System.err.println("I just allocated the object " + newObj +
-                        " of type " + desc + " whose size is " + size);
-                if (count != -1) {
-                    System.err.println("It's an array of size " + count);
+        final Sampler sampler = (count, desc, newObj, size) -> {
+            if (!samplingEnabled.get()) {
+                return;
+            }
+            for (int i = 0; i < exclude.length; i++) {
+                if (exclude[i].equals(desc)) {
+                    return; // exclude
                 }
-
-                // show a stack trace to see which line caused allocation
-                new RuntimeException().printStackTrace();
             }
+            System.err.println("I just allocated the object " + newObj +
+                    " of type " + desc + " whose size is " + size);
+            if (count != -1) {
+                System.err.println("It's an array of size " + count);
+            }
+
+            // show a stack trace to see which line caused allocation
+            new RuntimeException().printStackTrace();
         };
         Thread.sleep(500);
         final StringMapMessage mapMessage = new StringMapMessage().with("eventId", "Login");
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderDataSourceTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderDataSourceTest.java
index 732c2f7..c4a7312 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderDataSourceTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderDataSourceTest.java
@@ -34,8 +34,6 @@ import org.h2.util.IOUtils;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
 import static org.junit.Assert.*;
 import static org.mockito.BDDMockito.given;
@@ -62,12 +60,7 @@ public abstract class AbstractJdbcAppenderDataSourceTest {
     private DataSource createMockDataSource() {
         try {
             final DataSource dataSource = mock(DataSource.class);
-            given(dataSource.getConnection()).willAnswer(new Answer<Connection>() {
-                @Override
-                public Connection answer(final InvocationOnMock invocation) throws Throwable {
-                    return jdbcRule.getConnectionSource().getConnection();
-                }
-            });
+            given(dataSource.getConnection()).willAnswer(invocation -> jdbcRule.getConnectionSource().getConnection());
             return dataSource;
         } catch (final SQLException e) {
             Throwables.rethrow(e);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppenderMapMessageDataSourceTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppenderMapMessageDataSourceTest.java
index 5cae9af..bee9786 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppenderMapMessageDataSourceTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppenderMapMessageDataSourceTest.java
@@ -42,8 +42,6 @@ import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
 /**
  * Unit tests {@link MapMessage}s for JdbcAppender using a {@link DataSource} configuration.
@@ -75,12 +73,7 @@ public class JdbcAppenderMapMessageDataSourceTest {
     private DataSource createMockDataSource() {
         try {
             final DataSource dataSource = mock(DataSource.class);
-            given(dataSource.getConnection()).willAnswer(new Answer<Connection>() {
-                @Override
-                public Connection answer(final InvocationOnMock invocation) throws Throwable {
-                    return jdbcRule.getConnectionSource().getConnection();
-                }
-            });
+            given(dataSource.getConnection()).willAnswer(invocation -> jdbcRule.getConnectionSource().getConnection());
             return dataSource;
         } catch (final SQLException e) {
             Throwables.rethrow(e);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
index b639b4d..3775aa5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
@@ -93,12 +93,9 @@ public class JeroMqAppenderTest {
             appender.resetSendRcs();
             final ExecutorService fixedThreadPool = Executors.newFixedThreadPool(nThreads);
             for (int i = 0; i < 10.; i++) {
-                fixedThreadPool.submit(new Runnable() {
-                    @Override
-                    public void run() {
-                        logger.info("Hello");
-                        logger.info("Again");
-                    }
+                fixedThreadPool.submit(() -> {
+                    logger.info("Hello");
+                    logger.info("Again");
                 });
             }
             final List<String> list = future.get();
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderCloseTimeoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderCloseTimeoutTest.java
index aaa5441..424249c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderCloseTimeoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderCloseTimeoutTest.java
@@ -17,11 +17,9 @@
 
 package org.apache.logging.log4j.core.appender.mom.kafka;
 
-import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.kafka.clients.producer.MockProducer;
-import org.apache.kafka.clients.producer.Producer;
 import org.apache.logging.log4j.categories.Appenders;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.junit.LoggerContextRule;
@@ -54,12 +52,7 @@ public class KafkaAppenderCloseTimeoutTest {
 
     @BeforeClass
     public static void setUpClass() throws Exception {
-        KafkaManager.producerFactory = new KafkaProducerFactory() {
-            @Override
-            public Producer<byte[], byte[]> newKafkaProducer(final Properties config) {
-                return kafka;
-            }
-        };
+        KafkaManager.producerFactory = config -> kafka;
     }
 
     @Rule
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
index d88e382..45f4064 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppenderTest.java
@@ -29,13 +29,11 @@ import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
-import java.util.Properties;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import org.apache.kafka.clients.producer.MockProducer;
-import org.apache.kafka.clients.producer.Producer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.clients.producer.RecordMetadata;
 import org.apache.log4j.MDC;
@@ -94,12 +92,7 @@ public class KafkaAppenderTest {
 
 	@BeforeClass
 	public static void setUpClass() throws Exception {
-		KafkaManager.producerFactory = new KafkaProducerFactory() {
-			@Override
-			public Producer<byte[], byte[]> newKafkaProducer(final Properties config) {
-				return kafka;
-			}
-		};
+		KafkaManager.producerFactory = config -> kafka;
 	}
 
 	@Rule
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java
index 772a947..ad22d9e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java
@@ -41,9 +41,7 @@ import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.runners.MockitoJUnitRunner;
-import org.mockito.stubbing.Answer;
 
 import static org.junit.Assert.*;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -70,18 +68,8 @@ public class NoSqlDatabaseManagerTest {
     @Before
     public void setUp() {
         given(provider.getConnection()).willReturn(connection);
-        given(connection.createObject()).willAnswer(new Answer<DefaultNoSqlObject>() {
-            @Override
-            public DefaultNoSqlObject answer(final InvocationOnMock invocation) throws Throwable {
-                return new DefaultNoSqlObject();
-            }
-        });
-        given(connection.createList(anyInt())).willAnswer(new Answer<DefaultNoSqlObject[]>() {
-            @Override
-            public DefaultNoSqlObject[] answer(final InvocationOnMock invocation) throws Throwable {
-                return new DefaultNoSqlObject[invocation.<Integer>getArgument(0)];
-            }
-        });
+        given(connection.createObject()).willAnswer(invocation -> new DefaultNoSqlObject());
+        given(connection.createList(anyInt())).willAnswer(invocation -> new DefaultNoSqlObject[invocation.<Integer>getArgument(0)]);
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
index 02a1f8a..aff0d76 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
@@ -32,7 +32,6 @@ import org.apache.logging.log4j.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.util.DummyNanoClock;
 import org.apache.logging.log4j.core.time.internal.FixedPreciseClock;
-import org.apache.logging.log4j.message.ParameterConsumer;
 import org.apache.logging.log4j.message.ReusableMessageFactory;
 import org.apache.logging.log4j.util.FilteredObjectInputStream;
 import org.apache.logging.log4j.util.StringMap;
@@ -253,11 +252,6 @@ public class RingBufferLogEventTest {
     @Test
     public void testForEachParameterNothingSet() {
         final RingBufferLogEvent evt = new RingBufferLogEvent();
-        evt.forEachParameter(new ParameterConsumer<Void>() {
-            @Override
-            public void accept(final Object parameter, final int parameterIndex, final Void state) {
-                fail("Should not have been called");
-            }
-        }, null);
+        evt.forEachParameter((parameter, parameterIndex, state) -> fail("Should not have been called"), null);
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/AbstractRunQueue.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/AbstractRunQueue.java
index 7ba9412..855a6f4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/AbstractRunQueue.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/AbstractRunQueue.java
@@ -31,18 +31,15 @@ public abstract class AbstractRunQueue implements IPerfTestRunner {
     private final Thread backGroundThread;
 
     AbstractRunQueue() {
-        backGroundThread = new Thread(new Runnable() {
-            @Override
-            public void run() {
-                for (; ; ) {
-                    try {
-                        if (Objects.equals(queue.take(), STOP)) {
-                            break;
-                        }
-                    } catch (final InterruptedException e) {
-                        e.printStackTrace();
+        backGroundThread = new Thread(() -> {
+            for (; ; ) {
+                try {
+                    if (Objects.equals(queue.take(), STOP)) {
                         break;
                     }
+                } catch (final InterruptedException e) {
+                    e.printStackTrace();
+                    break;
                 }
             }
         });
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/MultiThreadPerfTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/MultiThreadPerfTest.java
index 7b10b34..46c4ee7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/MultiThreadPerfTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/perftest/MultiThreadPerfTest.java
@@ -37,15 +37,12 @@ public class MultiThreadPerfTest extends PerfTest {
         // warmup at least 2 rounds and at most 1 minute
         final Histogram warmupHist = PerfTest.createHistogram();
         final long stop = System.nanoTime() + TimeUnit.MINUTES.toNanos(1);
-        final Runnable run1 = new Runnable() {
-            @Override
-            public void run() {
-                for (int i = 0; i < 10; i++) {
-                    final int LINES = PerfTest.throughput ? 50000 : 200000;
-                    runTest(runner, LINES, null, warmupHist, 2);
-                    if (i > 0 && System.nanoTime() - stop >= 0) {
-                        return;
-                    }
+        final Runnable run1 = () -> {
+            for (int i = 0; i < 10; i++) {
+                final int LINES = PerfTest.throughput ? 50000 : 200000;
+                runTest(runner, LINES, null, warmupHist, 2);
+                if (i > 0 && System.nanoTime() - stop >= 0) {
+                    return;
                 }
             }
         };
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjectorTest.java
index 2f913f7..2f6d1ba 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjectorTest.java
@@ -124,12 +124,7 @@ public class ThreadContextDataInjectorTest {
     public void testInheritableThreadContextImmutability() throws Throwable {
         prepareThreadContext(true);
         try {
-            newSingleThreadExecutor().submit(new Runnable() {
-                @Override
-                public void run() {
-                    testContextDataInjector();
-                }
-            }).get();
+            newSingleThreadExecutor().submit(this::testContextDataInjector).get();
         } catch (final ExecutionException ee) {
             throw ee.getCause();
         }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithJsonLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithJsonLayoutTest.java
index feff35a..ac93a1a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithJsonLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithJsonLayoutTest.java
@@ -62,12 +62,7 @@ public class ConcurrentLoggingWithJsonLayoutTest {
 
             // Appender is configured with ignoreExceptions="false";
             // any exceptions are propagated to the caller, so we can catch them here.
-            t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
-                @Override
-                public void uncaughtException(final Thread t, final Throwable e) {
-                    thrown.add(e);
-                }
-            });
+            t.setUncaughtExceptionHandler((t1, e) -> thrown.add(e));
             t.start();
         }
 
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
index 30ae580..80582da 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
@@ -350,16 +350,13 @@ public class FlumePersistentAppenderTest {
     @Test
 	public void testLogInterrupted() {
 		final ExecutorService executor = Executors.newSingleThreadExecutor();
-		executor.execute(new Runnable() {
-			@Override
-            public void run() {
-				executor.shutdownNow();
-				final Logger logger = LogManager.getLogger("EventLogger");
-				final Marker marker = MarkerManager.getMarker("EVENT");
-				logger.info(marker, "This is a test message");
-				Assert.assertTrue("Interruption status not preserved", Thread.currentThread().isInterrupted());
-			}
-		});
+		executor.execute(() -> {
+        	executor.shutdownNow();
+        	final Logger logger = LogManager.getLogger("EventLogger");
+        	final Marker marker = MarkerManager.getMarker("EVENT");
+        	logger.info(marker, "This is a test message");
+        	Assert.assertTrue("Interruption status not preserved", Thread.currentThread().isInterrupted());
+        });
 	}
 
     /*
diff --git a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGui.java b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGui.java
index a9260b5..fb822bb 100644
--- a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGui.java
+++ b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGui.java
@@ -179,12 +179,7 @@ public class ClientGui extends JPanel implements NotificationListener {
 
     @Override
     public void handleNotification(final Notification notif, final Object paramObject) {
-        SwingUtilities.invokeLater(new Runnable() {
-            @Override
-            public void run() { // LOG4J2-538
-                handleNotificationInAwtEventThread(notif, paramObject);
-            }
-        });
+        SwingUtilities.invokeLater(() -> handleNotificationInAwtEventThread(notif, paramObject));
     }
 
     private void handleNotificationInAwtEventThread(final Notification notif, final Object paramObject) {
@@ -284,29 +279,26 @@ public class ClientGui extends JPanel implements NotificationListener {
         final Client client = new Client(connector);
         final String title = "Log4j JMX Client - " + url;
 
-        SwingUtilities.invokeLater(new Runnable() {
-            @Override
-            public void run() {
-                installLookAndFeel();
-                try {
-                    final ClientGui gui = new ClientGui(client);
-                    final JFrame frame = new JFrame(title);
-                    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-                    frame.getContentPane().add(gui, BorderLayout.CENTER);
-                    frame.pack();
-                    frame.setVisible(true);
-                } catch (final Exception ex) {
-                    // if console is visible, print error so that
-                    // the stack trace remains visible after error dialog is
-                    // closed
-                    ex.printStackTrace();
+        SwingUtilities.invokeLater(() -> {
+            installLookAndFeel();
+            try {
+                final ClientGui gui = new ClientGui(client);
+                final JFrame frame = new JFrame(title);
+                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+                frame.getContentPane().add(gui, BorderLayout.CENTER);
+                frame.pack();
+                frame.setVisible(true);
+            } catch (final Exception ex) {
+                // if console is visible, print error so that
+                // the stack trace remains visible after error dialog is
+                // closed
+                ex.printStackTrace();
 
-                    // show error in dialog: there may not be a console window
-                    // visible
-                    final StringWriter sr = new StringWriter();
-                    ex.printStackTrace(new PrintWriter(sr));
-                    JOptionPane.showMessageDialog(null, sr.toString(), "Error", JOptionPane.ERROR_MESSAGE);
-                }
+                // show error in dialog: there may not be a console window
+                // visible
+                final StringWriter sr = new StringWriter();
+                ex.printStackTrace(new PrintWriter(sr));
+                JOptionPane.showMessageDialog(null, sr.toString(), "Error", JOptionPane.ERROR_MESSAGE);
             }
         });
     }
diff --git a/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter.java b/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter.java
index b6c57ed..8db69b8 100644
--- a/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter.java
+++ b/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter.java
@@ -26,7 +26,6 @@ import javax.persistence.PersistenceException;
 import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.impl.ContextDataFactory;
 import org.apache.logging.log4j.util.StringMap;
-import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.Strings;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -55,13 +54,7 @@ public class ContextDataJsonAttributeConverter implements AttributeConverter<Rea
         try {
             final JsonNodeFactory factory = OBJECT_MAPPER.getNodeFactory();
             final ObjectNode root = factory.objectNode();
-            contextData.forEach(new BiConsumer<String, Object>() {
-                @Override
-                public void accept(final String key, final Object value) {
-                    // we will cheat here and write the toString of the Object... meh, but ok.
-                    root.put(key, String.valueOf(value));
-                }
-            });
+            contextData.forEach((key, value) -> root.put(key, String.valueOf(value)));
             return OBJECT_MAPPER.writeValueAsString(root);
         } catch (final Exception e) {
             throw new PersistenceException("Failed to convert contextData to JSON string.", e);
diff --git a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/ApiLogger.java b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/ApiLogger.java
index 92d38ec..6e48bd1 100644
--- a/log4j-jul/src/main/java/org/apache/logging/log4j/jul/ApiLogger.java
+++ b/log4j-jul/src/main/java/org/apache/logging/log4j/jul/ApiLogger.java
@@ -51,12 +51,9 @@ public class ApiLogger extends Logger {
         super(logger.getName(), null);
         final Level javaLevel = LevelTranslator.toJavaLevel(logger.getLevel());
         // "java.util.logging.LoggingPermission" "control"
-        AccessController.doPrivileged(new PrivilegedAction<Object>() {
-            @Override
-            public Object run() {
-                ApiLogger.super.setLevel(javaLevel);
-                return null;
-            }
+        AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+            ApiLogger.super.setLevel(javaLevel);
+            return null;
         });
         this.logger = new WrappedLogger(logger);
     }
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java
index cde4ccf..68fe638 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/JsonWriterTest.java
@@ -377,12 +377,7 @@ public class JsonWriterTest {
         final String expectedJson = "\"foo\\tbar\\tbuzz\"";
         @SuppressWarnings("Convert2Lambda")
         final String actualJson = WRITER.use(() ->
-                WRITER.writeString(new StringBuilderFormattable() {
-                    @Override
-                    public void formatTo(StringBuilder stringBuilder) {
-                        stringBuilder.append("foo\tbar\tbuzz");
-                    }
-                }));
+                WRITER.writeString(stringBuilder -> stringBuilder.append("foo\tbar\tbuzz")));
         Assertions.assertThat(actualJson).isEqualTo(expectedJson);
     }
 
@@ -396,12 +391,7 @@ public class JsonWriterTest {
                 '"';
         @SuppressWarnings("Convert2Lambda")
         final String actualJson = WRITER.use(() ->
-                WRITER.writeString(new StringBuilderFormattable() {
-                    @Override
-                    public void formatTo(StringBuilder stringBuilder) {
-                        stringBuilder.append(excessiveString);
-                    }
-                }));
+                WRITER.writeString(stringBuilder -> stringBuilder.append(excessiveString)));
         Assertions.assertThat(actualJson).isEqualTo(expectedJson);
     }
 
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ClocksBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ClocksBenchmark.java
index 6ec0992..fdfee25 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ClocksBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ClocksBenchmark.java
@@ -155,16 +155,13 @@ public class ClocksBenchmark {
         private volatile short count;
 
         private OldCachedClock() {
-            final Thread updater = new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    while (true) {
-                        final long time = System.currentTimeMillis();
-                        millis = time;
-
-                        // avoid explicit dependency on sun.misc.Util
-                        LockSupport.parkNanos(1000 * 1000);
-                    }
+            final Thread updater = new Thread((Runnable) () -> {
+                while (true) {
+                    final long time = System.currentTimeMillis();
+                    millis = time;
+
+                    // avoid explicit dependency on sun.misc.Util
+                    LockSupport.parkNanos(1000 * 1000);
                 }
             }, "Clock Updater Thread");
             updater.setDaemon(true);
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/FileAppenderThrowableBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/FileAppenderThrowableBenchmark.java
index e6b78c2..9c5ddd7 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/FileAppenderThrowableBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/FileAppenderThrowableBenchmark.java
@@ -40,7 +40,6 @@ import org.slf4j.LoggerFactory;
 import java.io.File;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.FileHandler;
@@ -119,11 +118,8 @@ public class FileAppenderThrowableBenchmark {
     interface TestIface30 extends ThrowableHelper {}
 
     private static Throwable getComplexThrowable() {
-        ThrowableHelper helper = new ThrowableHelper() {
-            @Override
-            public void action() {
-                throw new IllegalStateException("Test Throwable");
-            }
+        ThrowableHelper helper = () -> {
+            throw new IllegalStateException("Test Throwable");
         };
         try {
             for (int i = 0; i < 31; i++) {
@@ -131,14 +127,11 @@ public class FileAppenderThrowableBenchmark {
                 helper = (ThrowableHelper) Proxy.newProxyInstance(
                         FileAppenderThrowableBenchmark.class.getClassLoader(),
                         new Class<?>[]{Class.forName(FileAppenderThrowableBenchmark.class.getName() + "$TestIface" + (i % 31))},
-                        new InvocationHandler() {
-                            @Override
-                            public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
-                                try {
-                                    return method.invoke(delegate, args);
-                                } catch (final InvocationTargetException e) {
-                                    throw e.getCause();
-                                }
+                        (InvocationHandler) (proxy, method, args) -> {
+                            try {
+                                return method.invoke(delegate, args);
+                            } catch (final InvocationTargetException e) {
+                                throw e.getCause();
                             }
                         });
             }
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
index d951617..10a6c99 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
@@ -24,7 +24,6 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.perf.nogc.OpenHashStringMap;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
-import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.TriConsumer;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
@@ -145,12 +144,7 @@ public class SortedArrayVsHashMapBenchmark {
         return new HashMap(populatedMap);
     }
 
-    static TriConsumer<String, Object, int[]> COUNTER = new TriConsumer<String, Object, int[]>() {
-        @Override
-        public void accept(final String s, final Object o, final int[] result) {
-            result[0] += s.hashCode() + o.hashCode();
-        }
-    };
+    static TriConsumer<String, Object, int[]> COUNTER = (s, o, result) -> result[0] += s.hashCode() + o.hashCode();
 
     @Benchmark
     public int iterateArrayContextDataTriConsumer() {
@@ -172,12 +166,7 @@ public class SortedArrayVsHashMapBenchmark {
     public int iterateArrayContextDataBiConsumer() {
         final int[] result = {0};
 
-        populatedSortedStringArrayMap.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                result[0] += s.hashCode() + o.hashCode();
-            }
-        });
+        populatedSortedStringArrayMap.forEach((s, o) -> result[0] += s.hashCode() + o.hashCode());
         return result[0];
     }
 
@@ -185,12 +174,7 @@ public class SortedArrayVsHashMapBenchmark {
     public int iterateHashContextDataBiConsumer() {
         final int[] result = {0};
 
-        populatedOpenHashContextData.forEach(new BiConsumer<String, Object>() {
-            @Override
-            public void accept(final String s, final Object o) {
-                result[0] += s.hashCode() + o.hashCode();
-            }
-        });
+        populatedOpenHashContextData.forEach((s, o) -> result[0] += s.hashCode() + o.hashCode());
         return result[0];
     }
 
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StackWalkBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StackWalkBenchmark.java
index 41dad86..20da72c 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StackWalkBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StackWalkBenchmark.java
@@ -63,7 +63,7 @@ public class StackWalkBenchmark {
     @Benchmark
     public void throwableSearch(Blackhole bh)  {
 
-        stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> {
+        stackDriver.deepCall(initialDepth, callDepth, fqcn -> {
             final StackTraceElement[] stackTrace = new Throwable().getStackTrace();
             boolean found = false;
             for (int i = 0; i < stackTrace.length; i++) {
@@ -82,20 +82,18 @@ public class StackWalkBenchmark {
 
     @Benchmark
     public void stackWalkerWalk(Blackhole bh) {
-        stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> {
-            return walker.walk(
-                    s -> s.dropWhile(f -> !f.getClassName().equals(fqcn)) // drop the top frames until we reach the logger
-                            .dropWhile(f -> f.getClassName().equals(fqcn)) // drop the logger frames
-                            .findFirst())
-                    .get()
-                    .toStackTraceElement();
-        });
+        stackDriver.deepCall(initialDepth, callDepth, fqcn -> walker.walk(
+                s -> s.dropWhile(f -> !f.getClassName().equals(fqcn)) // drop the top frames until we reach the logger
+                        .dropWhile(f -> f.getClassName().equals(fqcn)) // drop the logger frames
+                        .findFirst())
+                .get()
+                .toStackTraceElement());
     }
 
     @Benchmark
     public void stackWalkerArray(Blackhole bh)  {
 
-        stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> {
+        stackDriver.deepCall(initialDepth, callDepth, fqcn -> {
             FQCN.set(fqcn);
             final StackWalker.StackFrame walk = walker.walk(LOCATOR);
             final StackTraceElement element = walk == null ? null : walk.toStackTraceElement();
@@ -107,9 +105,7 @@ public class StackWalkBenchmark {
     @Benchmark
     public void baseline(Blackhole bh)  {
 
-        stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> {
-            return null;
-        });
+        stackDriver.deepCall(initialDepth, callDepth, fqcn -> null);
     }
 
     static final class FqcnCallerLocator implements Function<Stream<StackWalker.StackFrame>, StackWalker.StackFrame> {
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
index c4ac559..187e516 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
@@ -189,12 +189,7 @@ public class OpenHashStringMap<K, V> implements StringMap, ThreadContextMap {
         }
     }
     private static final TriConsumer<String, Object, StringMap> PUT_ALL =
-            new TriConsumer<String, Object, StringMap>() {
-        @Override
-        public void accept(final String key, final Object value, final StringMap contextData) {
-            contextData.putValue(key, value);
-        }
-    };
+            (key, value, contextData) -> contextData.putValue(key, value);
 
     private void assertNotFrozen() {
         if (immutable) {
@@ -247,12 +242,7 @@ public class OpenHashStringMap<K, V> implements StringMap, ThreadContextMap {
     }
 
     private static final TriConsumer<String, Object, Map<String, String>> COPY_INTO_MAP =
-            new TriConsumer<String, Object, Map<String, String>>() {
-        @Override
-        public void accept(final String k, final Object v, final Map<String, String> map) {
-            map.put(k, v == null ? null : v.toString());
-        }
-    };
+            (k, v, map) -> map.put(k, v == null ? null : v.toString());
 
     /*
      * Removes all elements from this map.
@@ -770,17 +760,14 @@ public class OpenHashStringMap<K, V> implements StringMap, ThreadContextMap {
     }
 
     private static final TriConsumer<String, Object, ObjectOutputStream> SERIALIZER =
-            new TriConsumer<String, Object, ObjectOutputStream>() {
-                @Override
-                public void accept(final String k, final Object v, final ObjectOutputStream objectOutputStream) {
-                    try {
-                        objectOutputStream.writeObject(k);
-                        objectOutputStream.writeObject(v);
-                    } catch (final IOException ioex) {
-                        throw new IllegalStateException(ioex);
-                    }
-                }
-            };
+            (k, v, objectOutputStream) -> {
+        try {
+            objectOutputStream.writeObject(k);
+            objectOutputStream.writeObject(v);
+        } catch (final IOException ioex) {
+            throw new IllegalStateException(ioex);
+        }
+    };
 
     @Override
     public String toString() {
diff --git a/log4j-web/src/main/java/org/apache/logging/log4j/web/WebLoggerContextUtils.java b/log4j-web/src/main/java/org/apache/logging/log4j/web/WebLoggerContextUtils.java
index a142bcc..10a7df4 100644
--- a/log4j-web/src/main/java/org/apache/logging/log4j/web/WebLoggerContextUtils.java
+++ b/log4j-web/src/main/java/org/apache/logging/log4j/web/WebLoggerContextUtils.java
@@ -101,16 +101,13 @@ public final class WebLoggerContextUtils {
      * @since 2.0.1
      */
     public static Runnable wrapExecutionContext(final ServletContext servletContext, final Runnable runnable) {
-        return new Runnable() {
-            @Override
-            public void run() {
-                final Log4jWebSupport webSupport = getWebLifeCycle(servletContext);
-                webSupport.setLoggerContext();
-                try {
-                    runnable.run();
-                } finally {
-                    webSupport.clearLoggerContext();
-                }
+        return () -> {
+            final Log4jWebSupport webSupport = getWebLifeCycle(servletContext);
+            webSupport.setLoggerContext();
+            try {
+                runnable.run();
+            } finally {
+                webSupport.clearLoggerContext();
             }
         };
     }
diff --git a/log4j-web/src/test/java/org/apache/logging/log4j/web/Log4jWebInitializerImplTest.java b/log4j-web/src/test/java/org/apache/logging/log4j/web/Log4jWebInitializerImplTest.java
index 71d0cf2..d648cbf 100644
--- a/log4j-web/src/test/java/org/apache/logging/log4j/web/Log4jWebInitializerImplTest.java
+++ b/log4j-web/src/test/java/org/apache/logging/log4j/web/Log4jWebInitializerImplTest.java
@@ -303,13 +303,10 @@ public class Log4jWebInitializerImplTest {
 
         assertNull("The context should still be null.", ContextAnchor.THREAD_CONTEXT.get());
 
-        final Runnable runnable = new Runnable() {
-            @Override
-            public void run() {
-                final LoggerContext context = ContextAnchor.THREAD_CONTEXT.get();
-                assertNotNull("The context should not be null.", context);
-                assertSame("The context is not correct.", loggerContext, context);
-            }
+        final Runnable runnable = () -> {
+            final LoggerContext context = ContextAnchor.THREAD_CONTEXT.get();
+            assertNotNull("The context should not be null.", context);
+            assertSame("The context is not correct.", loggerContext, context);
         };
 
         this.initializerImpl.wrapExecution(runnable);
diff --git a/log4j-web/src/test/java/org/apache/logging/log4j/web/TestAsyncServlet.java b/log4j-web/src/test/java/org/apache/logging/log4j/web/TestAsyncServlet.java
index bbe918b..32b399c 100644
--- a/log4j-web/src/test/java/org/apache/logging/log4j/web/TestAsyncServlet.java
+++ b/log4j-web/src/test/java/org/apache/logging/log4j/web/TestAsyncServlet.java
@@ -34,27 +34,21 @@ public class TestAsyncServlet extends HttpServlet {
     @Override
     protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
         final AsyncContext asyncContext = req.startAsync();
-        asyncContext.start(WebLoggerContextUtils.wrapExecutionContext(this.getServletContext(), new Runnable() {
-            @Override
-            public void run() {
-                final Logger logger = LogManager.getLogger(TestAsyncServlet.class);
-                logger.info("Hello, servlet!");
-            }
+        asyncContext.start(WebLoggerContextUtils.wrapExecutionContext(this.getServletContext(), () -> {
+            final Logger logger = LogManager.getLogger(TestAsyncServlet.class);
+            logger.info("Hello, servlet!");
         }));
     }
 
     @Override
     protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
         final AsyncContext asyncContext = req.startAsync();
-        asyncContext.start(new Runnable() {
-            @Override
-            public void run() {
-                final Log4jWebSupport webSupport =
-                    WebLoggerContextUtils.getWebLifeCycle(TestAsyncServlet.this.getServletContext());
-                webSupport.setLoggerContext();
-                // do stuff
-                webSupport.clearLoggerContext();
-            }
+        asyncContext.start(() -> {
+            final Log4jWebSupport webSupport =
+                WebLoggerContextUtils.getWebLifeCycle(TestAsyncServlet.this.getServletContext());
+            webSupport.setLoggerContext();
+            // do stuff
+            webSupport.clearLoggerContext();
         });
     }
 }