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/04 18:41:30 UTC

[5/7] logging-log4j2 git commit: LOG4J2-1344 FileManager and RollingFileManager manage their buffer size so cannot delegate creating a ByteBufferDestinationOutputStream to the constructor of their OutputStreamManager superclass

LOG4J2-1344 FileManager and RollingFileManager manage their buffer size so cannot delegate creating a ByteBufferDestinationOutputStream to the constructor of their OutputStreamManager superclass


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

Branch: refs/heads/LOG4J2-1343-no-gc-outputstreamappenders
Commit: ff21f2567f83a87f43d036cfc6f4a69f0748931b
Parents: 0f3d825
Author: rpopma <rp...@apache.org>
Authored: Tue Apr 5 01:38:53 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Tue Apr 5 01:38:53 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/core/appender/FileManager.java   | 11 +++++++++--
 .../core/appender/rolling/RollingFileManager.java  | 17 +++++++++++++++--
 2 files changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff21f256/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
index 4de34ad..e45b28c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileManager.java
@@ -29,6 +29,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.util.ByteBufferDestinationOutputStream;
+import org.apache.logging.log4j.core.util.Constants;
 
 
 /**
@@ -126,7 +128,7 @@ public class FileManager extends OutputStreamManager {
     public boolean isLocking() {
         return isLocking;
     }
-    
+
     /**
      * Returns the buffer size to use if the appender was configured with BufferedIO=true, otherwise returns a negative
      * number.
@@ -203,7 +205,12 @@ public class FileManager extends OutputStreamManager {
                 os = new FileOutputStream(name, data.append);
                 int bufferSize = data.bufferSize;
                 if (data.bufferedIO) {
-                    os = new BufferedOutputStream(os, bufferSize);
+
+                    // LOG4J2-1344 this Manager controls the buffer size so wrap the stream here
+                    // (or OutputStreamManager constructor will wrap the stream with a default-size buffer).
+                    os = Constants.ENABLE_DIRECT_ENCODERS
+                            ? new ByteBufferDestinationOutputStream(os, bufferSize)
+                            : new BufferedOutputStream(os, bufferSize);
                 } else {
                     bufferSize = -1; // signals to RollingFileManager not to use BufferedOutputStream
                 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ff21f256/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index 81104e8..2b824d7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -32,6 +32,8 @@ import org.apache.logging.log4j.core.appender.FileManager;
 import org.apache.logging.log4j.core.appender.ManagerFactory;
 import org.apache.logging.log4j.core.appender.rolling.action.AbstractAction;
 import org.apache.logging.log4j.core.appender.rolling.action.Action;
+import org.apache.logging.log4j.core.util.ByteBufferDestinationOutputStream;
+import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.util.Log4jThread;
 
 /**
@@ -135,7 +137,13 @@ public class RollingFileManager extends FileManager {
     protected void createFileAfterRollover() throws IOException  {
         final OutputStream os = new FileOutputStream(getFileName(), isAppend());
         if (getBufferSize() > 0) { // negative buffer size means no buffering
-            setOutputStream(new BufferedOutputStream(os, getBufferSize()));
+
+            // LOG4J2-1344 this Manager controls the buffer size so wrap the stream here
+            // (or OutputStreamManager constructor will wrap the stream with a default-size buffer).
+            final OutputStream actual = Constants.ENABLE_DIRECT_ENCODERS
+                    ? new ByteBufferDestinationOutputStream(os, getBufferSize())
+                    : new BufferedOutputStream(os, getBufferSize());
+            setOutputStream(actual);
         } else {
             setOutputStream(os);
         }
@@ -403,7 +411,12 @@ public class RollingFileManager extends FileManager {
                 os = new FileOutputStream(name, data.append);
                 int bufferSize = data.bufferSize;
                 if (data.bufferedIO) {
-                    os = new BufferedOutputStream(os, bufferSize);
+
+                    // LOG4J2-1344 this Manager controls the buffer size so wrap the stream here
+                    // (or OutputStreamManager constructor will wrap the stream with a default-size buffer).
+                    os = Constants.ENABLE_DIRECT_ENCODERS
+                            ? new ByteBufferDestinationOutputStream(os, bufferSize)
+                            : new BufferedOutputStream(os, bufferSize);
                 } else {
                     bufferSize = -1; // negative buffer size signals bufferedIO was configured false
                 }