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/20 11:29:17 UTC

[2/2] logging-log4j2 git commit: LOG4J2-1295 cast MessageFactory to MessageFactory2 (or wrap in MessageFactory2Adapter) only once at initialization time instead of for each message

LOG4J2-1295 cast MessageFactory to MessageFactory2 (or wrap in MessageFactory2Adapter) only once at initialization time instead of for each message


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

Branch: refs/heads/LOG4J2-1278-gc-free-logger
Commit: 3eefa3a865ef7cbd9a14074d0c39c6967420e29b
Parents: fea7320
Author: rpopma <rp...@apache.org>
Authored: Sun Mar 20 19:29:10 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Mar 20 19:29:10 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/spi/AbstractLogger.java       | 132 ++++---------------
 .../log4j/spi/MessageFactory2Adapter.java       | 108 +++++++++++++++
 2 files changed, 130 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3eefa3a8/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 1be9d87..e04e01f 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
@@ -93,7 +93,7 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     private static final String CATCHING = "Catching";
 
     protected final String name;
-    private final MessageFactory messageFactory;
+    private final MessageFactory2 messageFactory;
     private final FlowMessageFactory flowMessageFactory;
 
     /**
@@ -122,7 +122,7 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
      */
     public AbstractLogger(final String name, final MessageFactory messageFactory) {
         this.name = name;
-        this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : messageFactory;
+        this.messageFactory = messageFactory == null ? createDefaultMessageFactory() : narrow(messageFactory);
         this.flowMessageFactory = createDefaultFlowMessageFactory();
     }
 
@@ -222,14 +222,22 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
         }
     }
 
-    private static MessageFactory createDefaultMessageFactory() {
+    private static MessageFactory2 createDefaultMessageFactory() {
         try {
-            return DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
+            final MessageFactory result = DEFAULT_MESSAGE_FACTORY_CLASS.newInstance();
+            return narrow(result);
         } catch (final InstantiationException | IllegalAccessException e) {
             throw new IllegalStateException(e);
         }
     }
 
+    private static MessageFactory2 narrow(final MessageFactory result) {
+        if (result instanceof MessageFactory2) {
+            return (MessageFactory2) result;
+        }
+        return new MessageFactory2Adapter(result);
+    }
+
     private static FlowMessageFactory createDefaultFlowMessageFactory() {
         try {
             return DEFAULT_FLOW_MESSAGE_FACTORY_CLASS.newInstance();
@@ -1892,40 +1900,40 @@ 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 = newMessage(message, LambdaUtil.maybeLambda(p0));
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1));
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
                 LambdaUtil.maybeLambda(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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
                 LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
                 LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        final Message msg = messageFactory.newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
                 LambdaUtil.maybeLambda(p2), LambdaUtil.maybeLambda(p3), LambdaUtil.maybeLambda(p4),
                 LambdaUtil.maybeLambda(p5));
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
@@ -1934,7 +1942,7 @@ 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 Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6) {
-        final Message msg = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        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));
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
@@ -1943,7 +1951,7 @@ 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 Object p1, final Object p2, final Object p3, final Object p4, final Object p5,
             final Object p6, final Object p7) {
-        final Message msg = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        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));
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
@@ -1952,7 +1960,7 @@ 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 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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        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));
@@ -1962,7 +1970,7 @@ 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 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 = newMessage(message, LambdaUtil.maybeLambda(p0), LambdaUtil.maybeLambda(p1),
+        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));
@@ -1975,102 +1983,6 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
         logMessage(fqcn, level, marker, msg, msg.getThrowable());
     }
 
-    private Message newMessage(final String message, final Object p0) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0);
-        } else {
-            return factory.newMessage(message, p0);
-        }
-    }
-
-    private Message newMessage(final String message, final Object p0, final Object p1) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1);
-        } else {
-            return factory.newMessage(message, p0, p1);
-        }
-    }
-
-    private Message newMessage(final String message, final Object p0, final Object p1, final Object p2) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2);
-        } else {
-            return factory.newMessage(message, p0, p1, p2);
-        }
-    }
-
-    private Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3);
-        }
-    }
-
-    private Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
-            final Object p4) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4);
-        }
-    }
-
-    private Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
-            final Object p4, final Object p5) {
-        final MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4, p5);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4, p5);
-        }
-    }
-
-    private Message newMessage(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 MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4, p5, p6);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4, p5, p6);
-        }
-    }
-
-    private Message newMessage(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 MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
-        }
-    }
-
-    private Message newMessage(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 MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
-        }
-    }
-
-    private Message newMessage(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 MessageFactory factory = messageFactory;
-        if (factory instanceof MessageFactory2) {
-            return ((MessageFactory2) factory).newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
-        } else {
-            return factory.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
-        }
-    }
-
     @Override
     public void printf(final Level level, final Marker marker, final String format, final Object... params) {
         if (isEnabled(level, marker, format, params)) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3eefa3a8/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
new file mode 100644
index 0000000..d516dbf
--- /dev/null
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.spi;
+
+import java.util.Objects;
+
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.message.MessageFactory;
+import org.apache.logging.log4j.message.MessageFactory2;
+
+/**
+ * Adapts a legacy MessageFactory to the new MessageFactory2 interface.
+ *
+ * @since 2.6
+ */
+public class MessageFactory2Adapter implements MessageFactory2 {
+    private final MessageFactory wrapped;
+
+    public MessageFactory2Adapter(final MessageFactory wrapped) {
+        this.wrapped = Objects.requireNonNull(wrapped);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0) {
+        return wrapped.newMessage(message, p0);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1) {
+        return wrapped.newMessage(message, p0, p1);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1, final Object p2) {
+        return wrapped.newMessage(message, p0, p1, p2);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1, final Object p2,
+            final Object p3) {
+        return wrapped.newMessage(message, p0, p1, p2, p3);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+            final Object p4) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+            final Object p4, final Object p5) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4, p5);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+            final Object p4, final Object p5, final Object p6) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4, p5, p6);
+    }
+
+    @Override
+    public Message newMessage(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) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7);
+    }
+
+    @Override
+    public Message newMessage(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) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8);
+    }
+
+    @Override
+    public Message newMessage(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) {
+        return wrapped.newMessage(message, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
+    }
+
+    @Override
+    public Message newMessage(final Object message) {
+        return wrapped.newMessage(message);
+    }
+
+    @Override
+    public Message newMessage(final String message) {
+        return wrapped.newMessage(message);
+    }
+
+    @Override
+    public Message newMessage(final String message, final Object... params) {
+        return wrapped.newMessage(message, params);
+    }
+}