You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/03/29 17:28:43 UTC

logging-log4j2 git commit: LOG4J2-1278 removed ineffective check if Object parameter is a lambda

Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-1278-gc-free-logger 7485aac75 -> d5cbe125b


LOG4J2-1278	removed ineffective check if Object parameter is a lambda

- removed ineffective check if Object parameter is a lambda: the java compiler will not see a lambda expression as an Object.
- Removing this check boosts performance: methods with unrolled varargs used to be slightly slower than the varargs methods, now they are slightly faster (not a massive difference, but still nice)
- fixed failing LambdaLoggerTest


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/d5cbe125
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/d5cbe125
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/d5cbe125

Branch: refs/heads/LOG4J2-1278-gc-free-logger
Commit: d5cbe125b0fa24c4d347e4e121320c2cadca3cd5
Parents: 7485aac
Author: rpopma <rp...@apache.org>
Authored: Wed Mar 30 00:28:43 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Wed Mar 30 00:28:43 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/spi/AbstractLogger.java       | 35 ++++-------
 .../apache/logging/log4j/util/LambdaUtil.java   | 11 ----
 .../apache/logging/log4j/LambdaLoggerTest.java  | 62 ++++++++++----------
 3 files changed, 42 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d5cbe125/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
index e04e01f..9edd513 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
@@ -1900,80 +1900,65 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0));
+        final Message msg = messageFactory.newMessage(message, p0);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1));
+        final Message msg = messageFactory.newMessage(message, p0, p1);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
-                LambdaUtil.maybeLambda(p5));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
-                LambdaUtil.maybeLambda(p5), LambdaUtil.maybeLambda(p6));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6, final Object p7) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
-                LambdaUtil.maybeLambda(p5), LambdaUtil.maybeLambda(p6), LambdaUtil.maybeLambda(p7));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6, final Object p7, final Object p8) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
-                LambdaUtil.maybeLambda(p5), LambdaUtil.maybeLambda(p6), LambdaUtil.maybeLambda(p7),
-                LambdaUtil.maybeLambda(p8));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final String message,
             final Object p0, final Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6, final Object p7, final Object p8, final Object p9) {
-        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
-                LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
-                LambdaUtil.maybeLambda(p5), LambdaUtil.maybeLambda(p6), LambdaUtil.maybeLambda(p7),
-                LambdaUtil.maybeLambda(p8), LambdaUtil.maybeLambda(p9));
+        final Message msg = messageFactory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d5cbe125/log4j-api/src/main/java/org/apache/logging/log4j/util/LambdaUtil.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LambdaUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LambdaUtil.java
index 95dc265..33b0d2a 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LambdaUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LambdaUtil.java
@@ -91,15 +91,4 @@ public final class LambdaUtil {
         final Object result = supplier.get();
         return result instanceof Message ? (Message) result : messageFactory.newMessage(result);
     }
-
-    /**
-     * If the specified object is a {@code Supplier} then returns the result of calling its {@link Supplier#get()}
-     * method, otherwise returns the specified object itself.
-     *
-     * @param maybe the object to evaluate if it is a lambda, or return as is if it is not
-     * @return the result of evaluating the specified lambda, or the specified object itself it not a lambda
-     */
-    public static Object maybeLambda(final Object maybe) {
-        return maybe instanceof Supplier<?> ? ((Supplier<?>) maybe).get() : maybe;
-    }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d5cbe125/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
index c9f8e9a..06a5b62 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
@@ -201,6 +201,8 @@ public class LambdaLoggerTest {
 
     final MySupplier supplier = new MySupplier();
     final MySupplier supplier2 = new MySupplier();
+    final Supplier[] supplierArray1 = new Supplier[] {supplier};
+    final Supplier[] supplierArray2 = new Supplier[] {supplier, supplier2};
 
     @Before
     public void beforeEachTest() {
@@ -339,11 +341,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testDebugStringParamSupplier() {
-        logger2.disable().debug("abc {}", supplier);
+        logger2.disable().debug("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().debug("abc {}", supplier);
+        logger2.enable().debug("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -354,11 +356,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testDebugMarkerStringParamSupplier() {
-        logger2.disable().debug(marker, "abc {}", supplier);
+        logger2.disable().debug(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().debug(marker, "abc {}", supplier);
+        logger2.enable().debug(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -498,11 +500,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testErrorStringParamSupplier() {
-        logger2.disable().error("abc {}", supplier);
+        logger2.disable().error("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().error("abc {}", supplier);
+        logger2.enable().error("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -513,11 +515,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testErrorMarkerStringParamSupplier() {
-        logger2.disable().error(marker, "abc {}", supplier);
+        logger2.disable().error(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().error(marker, "abc {}", supplier);
+        logger2.enable().error(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -657,11 +659,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testFatalStringParamSupplier() {
-        logger2.disable().fatal("abc {}", supplier);
+        logger2.disable().fatal("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().fatal("abc {}", supplier);
+        logger2.enable().fatal("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -672,12 +674,12 @@ public class LambdaLoggerTest {
 
     @Test
     public void testFatalStringParam2Suppliers() {
-        logger2.disable().fatal("abc {}{}", supplier, supplier2);
+        logger2.disable().fatal("abc {}{}", supplierArray2);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
         assertFalse(supplier2.invoked);
 
-        logger2.enable().fatal("abc {}{}", supplier, supplier2);
+        logger2.enable().fatal("abc {}{}", supplierArray2);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
         assertTrue(supplier2.invoked);
@@ -689,11 +691,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testFatalMarkerStringParamSupplier() {
-        logger2.disable().fatal(marker, "abc {}", supplier);
+        logger2.disable().fatal(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().fatal(marker, "abc {}", supplier);
+        logger2.enable().fatal(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -833,11 +835,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testInfoStringParamSupplier() {
-        logger2.disable().info("abc {}", supplier);
+        logger2.disable().info("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().info("abc {}", supplier);
+        logger2.enable().info("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -848,11 +850,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testInfoMarkerStringParamSupplier() {
-        logger2.disable().info(marker, "abc {}", supplier);
+        logger2.disable().info(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().info(marker, "abc {}", supplier);
+        logger2.enable().info(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -992,11 +994,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testTraceStringParamSupplier() {
-        logger2.disable().trace("abc {}", supplier);
+        logger2.disable().trace("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().trace("abc {}", supplier);
+        logger2.enable().trace("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -1007,11 +1009,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testTraceMarkerStringParamSupplier() {
-        logger2.disable().trace(marker, "abc {}", supplier);
+        logger2.disable().trace(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().trace(marker, "abc {}", supplier);
+        logger2.enable().trace(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -1151,11 +1153,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testWarnStringParamSupplier() {
-        logger2.disable().warn("abc {}", supplier);
+        logger2.disable().warn("abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().warn("abc {}", supplier);
+        logger2.enable().warn("abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -1166,11 +1168,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testWarnMarkerStringParamSupplier() {
-        logger2.disable().warn(marker, "abc {}", supplier);
+        logger2.disable().warn(marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().warn(marker, "abc {}", supplier);
+        logger2.enable().warn(marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -1310,11 +1312,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testLogStringParamSupplier() {
-        logger2.disable().log(Level.WARN, "abc {}", supplier);
+        logger2.disable().log(Level.WARN, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().log(Level.WARN, "abc {}", supplier);
+        logger2.enable().log(Level.WARN, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);
 
@@ -1325,11 +1327,11 @@ public class LambdaLoggerTest {
 
     @Test
     public void testLogMarkerStringParamSupplier() {
-        logger2.disable().log(Level.WARN, marker, "abc {}", supplier);
+        logger2.disable().log(Level.WARN, marker, "abc {}", supplierArray1);
         assertTrue(logger2.list.isEmpty());
         assertFalse(supplier.invoked);
 
-        logger2.enable().log(Level.WARN, marker, "abc {}", supplier);
+        logger2.enable().log(Level.WARN, marker, "abc {}", supplierArray1);
         assertEquals(1, logger2.list.size());
         assertTrue(supplier.invoked);