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 2015/09/18 13:40:05 UTC

[1/2] logging-log4j2 git commit: Separate Collections-related LoggerConfig benchmarks into a separate class.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 13b8b0fff -> 82adb21a5


Separate Collections-related LoggerConfig benchmarks into a separate
class.

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

Branch: refs/heads/master
Commit: b1509216e2f2d7b23e53b16a4343cde7acca4d86
Parents: 8cff894
Author: rpopma <rp...@apache.org>
Authored: Fri Sep 18 20:39:24 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Sep 18 20:39:24 2015 +0900

----------------------------------------------------------------------
 .../log4j/perf/jmh/CollectionsBenchmark.java    | 118 +++++++++++++++++++
 .../log4j/perf/jmh/LoggerConfigBenchmark.java   |  84 +++++--------
 2 files changed, 145 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b1509216/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
new file mode 100644
index 0000000..e6ef08c
--- /dev/null
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
@@ -0,0 +1,118 @@
+/*
+ * 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.perf.jmh;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.infra.Blackhole;
+
+// ============================== HOW TO RUN THIS TEST: ====================================
+//
+// In sampling mode (latency test):
+// java -jar log4j-perf/target/benchmarks.jar ".*CollectionsBenchmark.*" -i 10 -f 1 -wi 5 -bm sample -tu ns
+//
+// Multi-threading test:
+// java -jar benchmarks.jar ".*CollectionsBenchmark.*"  -i 10 -f 1 -wi 5 -bm sample -tu ns -t 4
+//
+// Usage help:
+// java -jar log4j-perf/target/benchmarks.jar -help
+//
+@State(Scope.Benchmark)
+public class CollectionsBenchmark {
+    private ConcurrentHashMap<String, Long> map1 = new ConcurrentHashMap<String, Long>();
+    private CopyOnWriteArraySet<Long> arraySet1 = new CopyOnWriteArraySet<Long>();
+    private CopyOnWriteArrayList<Long> arrayList1 = new CopyOnWriteArrayList<Long>();
+    private ConcurrentHashMap<String, Long> map3 = new ConcurrentHashMap<String, Long>();
+    private CopyOnWriteArraySet<Long> arraySet3 = new CopyOnWriteArraySet<Long>();
+    private CopyOnWriteArrayList<Long> arrayList3 = new CopyOnWriteArrayList<Long>();
+
+    @Setup
+    public void setup() {
+        for (int i = 0; i < 3; i++) {
+            map3.put(String.valueOf(i), Long.valueOf(i));
+            arraySet3.add(Long.valueOf(i));
+            arrayList3.add(Long.valueOf(i));
+        }
+        map1.put(String.valueOf(1), Long.valueOf(1));
+        arraySet1.add(Long.valueOf(1));
+        arrayList1.add(Long.valueOf(1));
+    }
+
+    @Benchmark
+    public void testBaseline(final Blackhole bh) {
+    }
+
+    @Benchmark
+    public long iterMap1Element() {
+        long total = 0;
+        for (Long value : map1.values()) {
+            total += value;
+        }
+        return total;
+    }
+
+    @Benchmark
+    public long iterArraySet1Element() {
+        long total = 0;
+        for (Long value : arraySet1) {
+            total += value;
+        }
+        return total;
+    }
+
+    @Benchmark
+    public long iterArrayList1Element() {
+        long total = 0;
+        for (Long value : arrayList1) {
+            total += value;
+        }
+        return total;
+    }
+
+    @Benchmark
+    public long iterMap3Elements() {
+        long total = 0;
+        for (Long value : map3.values()) {
+            total += value;
+        }
+        return total;
+    }
+
+    @Benchmark
+    public long iterArraySet3Element() {
+        long total = 0;
+        for (Long value : arraySet3) {
+            total += value;
+        }
+        return total;
+    }
+
+    @Benchmark
+    public long iterArrayList3Element() {
+        long total = 0;
+        for (Long value : arrayList3) {
+            total += value;
+        }
+        return total;
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b1509216/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
index 47c540e..2f6cd95 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
@@ -16,8 +16,6 @@
  */
 package org.apache.logging.log4j.perf.jmh;
 
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -37,7 +35,6 @@ import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.Scope;
 import org.openjdk.jmh.annotations.Setup;
 import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
 import org.openjdk.jmh.infra.Blackhole;
 
 // ============================== HOW TO RUN THIS TEST: ====================================
@@ -53,12 +50,7 @@ import org.openjdk.jmh.infra.Blackhole;
 //
 @State(Scope.Benchmark)
 public class LoggerConfigBenchmark {
-    private ConcurrentHashMap<String, Long> map1 = new ConcurrentHashMap<String, Long>();
-    private CopyOnWriteArraySet<Long> arraySet1 = new CopyOnWriteArraySet<Long>();
-    private ConcurrentHashMap<String, Long> map3 = new ConcurrentHashMap<String, Long>();
-    private CopyOnWriteArraySet<Long> arraySet3 = new CopyOnWriteArraySet<Long>();
 
-    private ConcurrentHashMap<String, AppenderControl> appenderMap = new ConcurrentHashMap<String, AppenderControl>();
     private CopyOnWriteArraySet<AppenderControl> appenderSet = new CopyOnWriteArraySet<AppenderControl>();
     private volatile Filter filter = null;
     private boolean additive = true;
@@ -69,22 +61,21 @@ public class LoggerConfigBenchmark {
     private final Lock shutdownLock = new ReentrantLock();
     private final Condition noLogEvents = shutdownLock.newCondition(); // should only be used when shutdown == true
     private final LogEvent LOGEVENT = createLogEventWithoutException();
-    private final static String APPENDERNAME = "LIST";
-    private SimpleListAppender listAppender = new SimpleListAppender(APPENDERNAME);
+    private SimpleListAppender listAppender = new SimpleListAppender();
 
     private static class SimpleListAppender extends AbstractAppender {
         private static final long serialVersionUID = 1L;
         private final AtomicInteger count = new AtomicInteger();
 
-        protected SimpleListAppender(String name) {
-            super(name, null, null);
+        protected SimpleListAppender() {
+            super("list", null, null);
         }
 
         @Override
         public void append(LogEvent event) {
             count.incrementAndGet();
         }
-        
+
         public int size() {
             return count.get();
         }
@@ -92,16 +83,9 @@ public class LoggerConfigBenchmark {
 
     @Setup
     public void setup() {
-        for (int i = 0; i < 3; i++) {
-            map3.put(String.valueOf(i), Long.valueOf(i));
-            arraySet3.add(Long.valueOf(i));
-        }
-        map1.put(String.valueOf(1), Long.valueOf(1));
-        arraySet1.add(Long.valueOf(1));
 
         listAppender.start();
         final AppenderControl control = new AppenderControl(listAppender, Level.ALL, null);
-        appenderMap.put(APPENDERNAME, control);
         appenderSet.add(control);
     }
 
@@ -114,42 +98,6 @@ public class LoggerConfigBenchmark {
     }
 
     @Benchmark
-    public long iterMap1Element() {
-        long total = 0;
-        for (Long value : map1.values()) {
-            total += value;
-        }
-        return total;
-    }
-
-    @Benchmark
-    public long iterArraySet1Element() {
-        long total = 0;
-        for (Long value : arraySet1) {
-            total += value;
-        }
-        return total;
-    }
-
-    @Benchmark
-    public long iterMap3Elements() {
-        long total = 0;
-        for (Long value : map3.values()) {
-            total += value;
-        }
-        return total;
-    }
-
-    @Benchmark
-    public long iterArraySet3Element() {
-        long total = 0;
-        for (Long value : arraySet3) {
-            total += value;
-        }
-        return total;
-    }
-
-    @Benchmark
     public int logWithCountersAndLock() {
         log(LOGEVENT);
         return listAppender.size();
@@ -204,6 +152,24 @@ public class LoggerConfigBenchmark {
      *
      * @param event The log event.
      */
+    public void logWithCounterAndFlag(final LogEvent event) {
+        while (!beforeLogEventCheckCounterPositive()) {
+
+        }
+        try {
+            if (!isFiltered(event)) {
+                processLogEvent(event);
+            }
+        } finally {
+            afterLogEvent2();
+        }
+    }
+
+    /**
+     * Logs an event.
+     *
+     * @param event The log event.
+     */
     public void log3(final LogEvent event) {
         if (!isFiltered(event)) {
             processLogEvent(event);
@@ -224,6 +190,10 @@ public class LoggerConfigBenchmark {
         counter.incrementAndGet();
     }
 
+    private boolean beforeLogEventCheckCounterPositive() {
+        return counter.incrementAndGet() > 0;
+    }
+
     private void afterLogEvent() {
         if (counter.decrementAndGet() == 0) {
             signalCompletionIfShutdown();
@@ -265,7 +235,7 @@ public class LoggerConfigBenchmark {
     }
 
     protected void callAppenders(final LogEvent event) {
-        for (final AppenderControl control : appenderMap.values()) {
+        for (final AppenderControl control : appenderSet) {
             control.callAppender(event);
         }
     }


[2/2] logging-log4j2 git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2.git

Posted by rp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2.git

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

Branch: refs/heads/master
Commit: 82adb21a596b2df787637a955849fdedb6927d0f
Parents: b150921 13b8b0f
Author: rpopma <rp...@apache.org>
Authored: Fri Sep 18 20:39:50 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Sep 18 20:39:50 2015 +0900

----------------------------------------------------------------------
 .../org/apache/logging/log4j/util/Strings.java  | 80 ++++++++++----------
 .../logging/log4j/core/config/Configurator.java |  3 +-
 .../core/config/status/StatusConfiguration.java |  4 +-
 .../logging/log4j/core/util/FileUtilsTest.java  |  2 +-
 4 files changed, 45 insertions(+), 44 deletions(-)
----------------------------------------------------------------------