Java 8 improvements (#514)
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 899ebb6..12bb405 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
@@ -137,16 +137,13 @@
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((BiConsumer<String, String>) (key, 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");
}
});
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 09e06a6..0d82aa6 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 @@
}
}
- private static final 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 final TriConsumer<String, Object, StringBuilder> APPEND_EACH = (key, value, toAppendTo) -> toAppendTo.append('{').append(key).append(',').append(value).append('}');
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index f98bd39..6794430 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -338,12 +338,7 @@
try {
forceTcclOnly = System.getSecurityManager() == null ?
Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY) :
- AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
- @Override
- public Boolean run() {
- return Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY);
- }
- });
+ AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY));
} catch (final SecurityException se) {
forceTcclOnly = false;
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
index ac2216b..1efd771 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertiesUtil.java
@@ -427,12 +427,9 @@
private Environment(final PropertySource propertySource) {
final PropertyFilePropertySource sysProps = new PropertyFilePropertySource(LOG4J_SYSTEM_PROPERTIES_FILE_NAME);
try {
- sysProps.forEach(new BiConsumer<String, String>() {
- @Override
- public void accept(final String key, final String value) {
- if (System.getProperty(key) == null) {
- System.setProperty(key, value);
- }
+ sysProps.forEach((key, value) -> {
+ if (System.getProperty(key) == null) {
+ System.setProperty(key, value);
}
});
} catch (final SecurityException ex) {
@@ -459,18 +456,15 @@
normalized.clear();
tokenized.clear();
for (final PropertySource source : sources) {
- source.forEach(new BiConsumer<String, String>() {
- @Override
- public void accept(final String key, final String value) {
- if (key != null && value != null) {
- literal.put(key, value);
- final List<CharSequence> tokens = PropertySource.Util.tokenize(key);
- if (tokens.isEmpty()) {
- normalized.put(source.getNormalForm(Collections.singleton(key)), value);
- } else {
- normalized.put(source.getNormalForm(tokens), value);
- tokenized.put(tokens, value);
- }
+ source.forEach((key, value) -> {
+ if (key != null && value != null) {
+ literal.put(key, value);
+ final List<CharSequence> tokens = PropertySource.Util.tokenize(key);
+ if (tokens.isEmpty()) {
+ normalized.put(source.getNormalForm(Collections.singleton(key)), value);
+ } else {
+ normalized.put(source.getNormalForm(tokens), value);
+ tokenized.put(tokens, value);
}
}
});
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
index 0882f6f..c7df7a7 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
@@ -67,12 +67,7 @@
private static final long serialVersionUID = -5748905872274478116L;
private static final int HASHVAL = 31;
- 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);
- }
- };
+ private static final TriConsumer<String, Object, StringMap> PUT_ALL = (key, value, contextData) -> contextData.putValue(key, value);
/**
* An empty array instance to share when the table is not inflated.
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
index ac6819b..86477de 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
@@ -79,7 +79,7 @@
return PrivateSecurityManagerStackTraceUtil.getCurrentStackTrace();
}
final Stack<Class<?>> stack = new Stack<Class<?>>();
- final List<Class<?>> classes = walker.walk(s -> s.map(f -> f.getDeclaringClass()).collect(Collectors.toList()));
+ final List<Class<?>> classes = walker.walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass).collect(Collectors.toList()));
stack.addAll(classes);
return stack;
}
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 40c3c02..c972526 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
@@ -214,17 +214,14 @@
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 Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
- final Field unsafeField = unsafeClass.getDeclaredField("theUnsafe");
- unsafeField.setAccessible(true);
- final Object unsafe = unsafeField.get(null);
- final Method invokeCleaner = unsafeClass.getMethod("invokeCleaner", ByteBuffer.class);
- invokeCleaner.invoke(unsafe, mbb);
- return null;
- }
+ AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
+ final Class<?> unsafeClass = Class.forName("sun.misc.Unsafe");
+ final Field unsafeField = unsafeClass.getDeclaredField("theUnsafe");
+ unsafeField.setAccessible(true);
+ final Object unsafe = unsafeField.get(null);
+ final Method invokeCleaner = unsafeClass.getMethod("invokeCleaner", ByteBuffer.class);
+ invokeCleaner.invoke(unsafe, mbb);
+ 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/nosql/NoSqlDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
index 14322e3..3f1782c 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
@@ -86,12 +86,7 @@
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 +142,7 @@
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((BiConsumer<String, String>) (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..1447fdb 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 @@
* 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 b77a4f6..a221afd 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
@@ -160,12 +160,7 @@
* @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 9333611..1c1783f 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 @@
@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(c::add, maxElements);
}
@Override
@@ -148,36 +143,22 @@
}
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;
+ } else if (idleCounter > 100) {
+ Thread.yield();
}
- }),
- 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;
- }
+ 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 f5c87ac..35ee5c7 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 @@
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 f1cd4bc..4d0ea36 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 @@
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 = (Comparator<String>) (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 @@
sortedKeys = null;
}
- private static final 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 final 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/pattern/MdcPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
index b7b3c1b..7cb1d8d 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 @@
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 @@
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 @@
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/time/ClockFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
index aff68c2..f076f5a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/ClockFactory.java
@@ -75,12 +75,12 @@
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.time.internal.CachedClock", new Supplier<Clock>() { @Override public Clock get() { return CachedClock.instance(); } });
- result.put("org.apache.logging.log4j.core.time.internal.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.time.internal.CachedClock", CachedClock::instance);
+ result.put("org.apache.logging.log4j.core.time.internal.CoarseCachedClock", CoarseCachedClock::instance);
return result;
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/CachedClock.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/CachedClock.java
index dd38791..423b4d8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/CachedClock.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/CachedClock.java
@@ -37,15 +37,12 @@
private short count = 0;
private CachedClock() {
- final Thread updater = new Log4jThread(new Runnable() {
- @Override
- public void run() {
- while (true) {
- millis = System.currentTimeMillis();
+ final Thread updater = new Log4jThread(() -> {
+ while (true) {
+ millis = System.currentTimeMillis();
- // 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/time/internal/format/FastDateParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
index 5450100..70185b0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
@@ -98,12 +98,7 @@
// 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/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
index 554c4cc..06aa387 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
@@ -2577,6 +2577,7 @@
return Enum.valueOf((Class<Enum>) type, value);
}
};
+ return (ITypeConverter<Object>) value -> Enum.valueOf((Class<Enum>) type, value);
}
throw new MissingTypeConverterException(CommandLine.this, "No TypeConverter registered for " + type.getName() + " of field " + field);
}
diff --git a/log4j-jms/src/main/java/org/apache/logging/log4j/jms/appender/JmsManager.java b/log4j-jms/src/main/java/org/apache/logging/log4j/jms/appender/JmsManager.java
index 1ed2ba5..291fd7d 100644
--- a/log4j-jms/src/main/java/org/apache/logging/log4j/jms/appender/JmsManager.java
+++ b/log4j-jms/src/main/java/org/apache/logging/log4j/jms/appender/JmsManager.java
@@ -405,15 +405,12 @@
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-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..4a9e56f 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,11 +179,8 @@
@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(() -> { // LOG4J2-538
+ handleNotificationInAwtEventThread(notif, paramObject);
});
}
@@ -284,29 +281,26 @@
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/jpa/converter/ContextDataJsonAttributeConverter.java b/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/converter/ContextDataJsonAttributeConverter.java
index b298172..26170ff 100644
--- a/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/converter/ContextDataJsonAttributeConverter.java
+++ b/log4j-jpa/src/main/java/org/apache/logging/log4j/jpa/converter/ContextDataJsonAttributeConverter.java
@@ -55,12 +55,9 @@
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) -> {
+ // we will cheat here and write the toString of the Object... meh, but ok.
+ root.put(key, String.valueOf(value));
});
return OBJECT_MAPPER.writeValueAsString(root);
} catch (final Exception e) {
diff --git a/log4j-layout-jackson/src/main/java/org/apache/logging/log4j/jackson/ContextDataSerializer.java b/log4j-layout-jackson/src/main/java/org/apache/logging/log4j/jackson/ContextDataSerializer.java
index 6023ada..95059ab 100644
--- a/log4j-layout-jackson/src/main/java/org/apache/logging/log4j/jackson/ContextDataSerializer.java
+++ b/log4j-layout-jackson/src/main/java/org/apache/logging/log4j/jackson/ContextDataSerializer.java
@@ -37,21 +37,17 @@
private static final long serialVersionUID = 1L;
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 {
- if (value == null) {
- jsonGenerator.writeNullField(key);
- } else {
- jsonGenerator.writeStringField(key, String.valueOf(value));
+ (key, value, jsonGenerator) -> {
+ try {
+ if (value == null) {
+ jsonGenerator.writeNullField(key);
+ } else {
+ jsonGenerator.writeStringField(key, String.valueOf(value));
+ }
+ } catch (final Exception ex) {
+ throw new IllegalStateException("Problem with key " + key, ex);
}
- } catch (final Exception ex) {
- throw new IllegalStateException("Problem with key " + key, ex);
- }
- }
- };
+ };
protected ContextDataSerializer() {
super(Map.class, false);
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkReport.java b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkReport.java
index 5f8dd2c..d42cfcf 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkReport.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkReport.java
@@ -315,9 +315,7 @@
filteredJmhSummaries
.stream()
.sorted(jmhSummaryComparator)
- .forEach((final JmhSummary jmhSummary) -> {
- dumpJmhSummary(printStream, maxOpRate, jmhSummary);
- });
+ .forEach((final JmhSummary jmhSummary) -> dumpJmhSummary(printStream, maxOpRate, jmhSummary));
// Print footer.
printStream.println("|===");
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 2d2ccb3..f96a563 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 @@
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;
+ final Thread updater = new Thread(() -> {
+ 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);
}
}, "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 fde3b47..cc109ec 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
@@ -119,11 +119,8 @@
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 +128,11 @@
helper = (ThrowableHelper) Proxy.newProxyInstance(
FileAppenderThrowableBenchmark.class.getClassLoader(),
new Class<?>[]{Class.forName(FileAppenderThrowableBenchmark.class.getName() + "$TestIface" + (i % 31))},
- new InvocationHandler() {
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- try {
- return method.invoke(delegate, args);
- } catch (InvocationTargetException e) {
- throw e.getCause();
- }
+ (proxy, method, args) -> {
+ try {
+ return method.invoke(delegate, args);
+ } catch (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 81baeda..047da75 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
@@ -145,12 +145,7 @@
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 +167,7 @@
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 +175,7 @@
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 15dcfb6..cd61fc5 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
@@ -83,22 +83,18 @@
@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 baseline(Blackhole bh) {
- stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> {
- return null;
- });
+ stackDriver.deepCall(initialDepth, callDepth, (fqcn) -> null);
}
@Benchmark
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..f976869 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 @@
}
}
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 @@
}
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,15 +760,12 @@
}
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);
}
};
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/PluginRegistry.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/PluginRegistry.java
index bae5c8a..6cac60a 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/PluginRegistry.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/util/PluginRegistry.java
@@ -309,10 +309,7 @@
for (final Class<?> clazz : resolver.getClasses()) {
final Plugin plugin = clazz.getAnnotation(Plugin.class);
final String categoryLowerCase = plugin.category().toLowerCase();
- List<PluginType<?>> list = newPluginsByCategory.get(categoryLowerCase);
- if (list == null) {
- newPluginsByCategory.put(categoryLowerCase, list = new ArrayList<>());
- }
+ List<PluginType<?>> list = newPluginsByCategory.computeIfAbsent(categoryLowerCase, k -> new ArrayList<>());
final PluginEntry mainEntry = new PluginEntry();
final String mainElementName = plugin.elementType().equals(
Plugin.EMPTY) ? plugin.name() : plugin.elementType();
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 4651f00..3ff0f05 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 @@
* @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();
}
};
}