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/04/12 17:00:20 UTC

[1/6] logging-log4j2 git commit: LOG4J2-1343 performance optimization: if immediateFlush and buffer is empty then write straight to the file without copying into the buffer

Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered 141bdd2ab -> 8547f5383


LOG4J2-1343 performance optimization: if immediateFlush and buffer is empty then write straight to the file without copying into the buffer


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: 3c6584e47ec0df29586bd577ba3368592159a240
Parents: 141bdd2
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 20:17:38 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 20:17:38 2016 +0900

----------------------------------------------------------------------
 .../apache/logging/log4j/core/appender/OutputStreamManager.java | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3c6584e4/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
index 7379804..c1b4934 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
@@ -170,7 +170,10 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
      * @throws AppenderLoggingException if an error occurs.
      */
     protected synchronized void write(final byte[] bytes, final int offset, final int length, boolean immediateFlush) {
-        // System.out.println("write " + count);
+        if (immediateFlush && byteBuffer.position() == 0) {
+            writeToDestination(bytes, offset, length);
+            return;
+        }
         if (length >= byteBuffer.capacity()) {
             // if request length exceeds buffer capacity, flush the buffer and write the data directly
             flush();


[3/6] logging-log4j2 git commit: LOG4J2-1343 removed outdated comment: the new implementation does not have this problem (still not enabling gc-free sockets for now...)

Posted by rp...@apache.org.
LOG4J2-1343 removed outdated comment: the new implementation does not have this problem (still not enabling gc-free sockets for now...)


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: 8d7bf48d251c18d42285ec85ebecdf77a152f06a
Parents: c99f4aa
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 22:22:09 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 22:22:09 2016 +0900

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/core/appender/SocketAppender.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8d7bf48d/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
index 6d0221e..1a542db 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/SocketAppender.java
@@ -248,7 +248,6 @@ public class SocketAppender extends AbstractOutputStreamAppender<AbstractSocketM
     @Override
     protected void directEncodeEvent(final LogEvent event) {
         // Disable garbage-free logging for now:
-        // problem with TCP: synchronization on manager in Reconnector thread would give deadlock.
         // problem with UDP: 8K buffer size means that largish messages get broken up into chunks
         writeByteArrayToManager(event); // revert to classic (non-garbage free) logging
     }


[5/6] logging-log4j2 git commit: LOG4J2-1343 increase iterations to increase probability of finding occasional problems; make errors in background thread (if any) accessible to test runner thread

Posted by rp...@apache.org.
LOG4J2-1343 increase iterations to increase probability of finding occasional problems; make errors in background thread (if any) accessible to test runner thread


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: 9974a1f51e4d37b4080ccef3e6cf3e42d9c232cf
Parents: c70775c
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 22:26:26 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 22:26:26 2016 +0900

----------------------------------------------------------------------
 .../log4j/core/appender/FileAppenderTest.java   | 21 +++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9974a1f5/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index df0b2b2..eea70ff 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -105,26 +105,34 @@ public class FileAppenderTest {
     @Test
     public void testMultipleAppenders() throws Exception {
         final ExecutorService pool = Executors.newFixedThreadPool(THREADS);
-        final int count = 10;
-        final Runnable runnable = new FileWriterRunnable(false, count);
+        final Exception[] error = new Exception[1];
+        final int count = 100;
+        final Runnable runnable = new FileWriterRunnable(false, count, error);
         for (int i = 0; i < THREADS; ++i) {
             pool.execute(runnable);
         }
         pool.shutdown();
         pool.awaitTermination(10, TimeUnit.SECONDS);
+        if (error[0] != null) {
+            throw error[0];
+        }
         verifyFile(THREADS * count);
     }
 
     @Test
     public void testMultipleLockedAppenders() throws Exception {
         final ExecutorService pool = Executors.newFixedThreadPool(THREADS);
-        final int count = 10;
-        final Runnable runnable = new FileWriterRunnable(true, count);
+        final Exception[] error = new Exception[1];
+        final int count = 100;
+        final Runnable runnable = new FileWriterRunnable(true, count, error);
         for (int i = 0; i < THREADS; ++i) {
             pool.execute(runnable);
         }
         pool.shutdown();
         pool.awaitTermination(10, TimeUnit.SECONDS);
+        if (error[0] != null) {
+            throw error[0];
+        }
         verifyFile(THREADS * count);
     }
 
@@ -207,10 +215,12 @@ public class FileAppenderTest {
     public class FileWriterRunnable implements Runnable {
         private final boolean lock;
         private final int count;
+        private final Exception[] error;
 
-        public FileWriterRunnable(final boolean lock, final int count) {
+        public FileWriterRunnable(final boolean lock, final int count, final Exception[] error) {
             this.lock = lock;
             this.count = count;
+            this.error = error;
         }
 
         @Override
@@ -221,6 +231,7 @@ public class FileAppenderTest {
                 writer(lock, count, thread.getName());
 
             } catch (final Exception ex) {
+                error[0] = ex;
                 throw new RuntimeException(ex);
             }
         }


[2/6] logging-log4j2 git commit: LOG4J2-1343 bugfix in performance optimization: must flush destination when done

Posted by rp...@apache.org.
LOG4J2-1343 bugfix in performance optimization: must flush destination when done


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: c99f4aade2725937a64d959c6df01f0ecd8e4e7b
Parents: 3c6584e
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 22:14:01 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 22:14:01 2016 +0900

----------------------------------------------------------------------
 .../org/apache/logging/log4j/core/appender/OutputStreamManager.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c99f4aad/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
index c1b4934..b22f083 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
@@ -172,6 +172,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
     protected synchronized void write(final byte[] bytes, final int offset, final int length, boolean immediateFlush) {
         if (immediateFlush && byteBuffer.position() == 0) {
             writeToDestination(bytes, offset, length);
+            flushDestination();
             return;
         }
         if (length >= byteBuffer.capacity()) {


[4/6] logging-log4j2 git commit: LOG4J2-1343 added countdown latch to ensure the UDP server is listening before logging the event; split up lines for easier debugging

Posted by rp...@apache.org.
LOG4J2-1343 added countdown latch to ensure the UDP server is listening before logging the event; split up lines for easier debugging


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: c70775c94d90eeb6ff96e25fe516c783a45504ac
Parents: 8d7bf48
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 22:24:31 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 22:24:31 2016 +0900

----------------------------------------------------------------------
 .../log4j/core/appender/SocketAppenderTest.java      | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c70775c9/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
index 5e4a556..50586f7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
@@ -33,6 +33,7 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.Level;
@@ -148,6 +149,11 @@ public class SocketAppenderTest {
 
     @Test
     public void testUdpAppender() throws Exception {
+        try {
+            udpServer.latch.await();
+        } catch (InterruptedException ex) {
+            ex.printStackTrace();
+        }
 
         final SocketAppender appender = SocketAppender.createAppender("localhost", PORT, Protocol.UDP, null, 0, -1,
                 false, "Test", true, true, null, null, false, null);
@@ -207,6 +213,7 @@ public class SocketAppenderTest {
         private final DatagramSocket sock;
         private boolean shutdown = false;
         private Thread thread;
+        private CountDownLatch latch = new CountDownLatch(1);
 
         public UDPSocketServer() throws IOException {
             this.sock = new DatagramSocket(PORT);
@@ -224,12 +231,16 @@ public class SocketAppenderTest {
             final DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
             try {
                 while (!shutdown) {
+                    latch.countDown();
                     sock.receive(packet);
                     final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(packet.getData()));
                     ++udpCount;
-                    list.add((LogEvent) ois.readObject());
+                    final Object received = ois.readObject(); // separate lines for debugging
+                    final LogEvent event = (LogEvent) received;
+                    list.add(event);
                 }
-            } catch (final Exception ex) {
+            } catch (final Throwable ex) {
+                ex.printStackTrace();
                 if (!shutdown) {
                     throw new RuntimeException(ex);
                 }


[6/6] logging-log4j2 git commit: LOG4J2-1274 enable garbage-free text encoding to bytes by default

Posted by rp...@apache.org.
LOG4J2-1274 enable garbage-free text encoding to bytes by default


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

Branch: refs/heads/LOG4J2-1343-no-gc-os-appenders-bytebuffered
Commit: 8547f5383374738e202a8cee6456b8bb59cf2386
Parents: 9974a1f
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 12 22:28:41 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 12 22:28:41 2016 +0900

----------------------------------------------------------------------
 .../main/java/org/apache/logging/log4j/core/util/Constants.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8547f538/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
index eedcf71..54e0a86 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
@@ -103,8 +103,9 @@ public final class Constants {
      * @since 2.6
      */
     public static final boolean ENABLE_DIRECT_ENCODERS = PropertiesUtil.getProperties().getBooleanProperty(
-            "log4j2.enable.direct.encoders",
-            AsyncLoggerContextSelector.class.getName().equals(PropertiesUtil.getProperties().getStringProperty(LOG4J_CONTEXT_SELECTOR)));
+            "log4j2.enable.direct.encoders", true); // enable GC-free text encoding by default
+            // the alternative is to enable GC-free encoding only by default only when using all-async loggers:
+            //AsyncLoggerContextSelector.class.getName().equals(PropertiesUtil.getProperties().getStringProperty(LOG4J_CONTEXT_SELECTOR)));
 
     /**
      * Prevent class instantiation.