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/03 18:12:52 UTC
[3/3] logging-log4j2 git commit: LOG4J2-1344 initial gc-free version
(draft)
LOG4J2-1344 initial gc-free version (draft)
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a0ffd098
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a0ffd098
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a0ffd098
Branch: refs/heads/LOG4J2-1344-gc-free-fileappender
Commit: a0ffd098ec5b985d70263df8ab6cfab5a77a5be4
Parents: 7aa4dc5
Author: rpopma <rp...@apache.org>
Authored: Mon Apr 4 01:12:42 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Apr 4 01:12:42 2016 +0900
----------------------------------------------------------------------
.../log4j/core/appender/FileManager.java | 21 +++++++++----
.../appender/rolling/RollingFileManager.java | 31 ++++++++++++++++----
2 files changed, 41 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a0ffd098/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..998695f 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,9 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.layout.ByteBufferDestination;
+import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.core.util.OutputStreamByteBufferDestinationAdapter;
/**
@@ -45,8 +48,8 @@ public class FileManager extends OutputStreamManager {
protected FileManager(final String fileName, final OutputStream os, final boolean append, final boolean locking,
final String advertiseURI, final Layout<? extends Serializable> layout, final int bufferSize,
- final boolean writeHeader) {
- super(os, fileName, layout, writeHeader);
+ final boolean writeHeader, final ByteBufferDestination destination) {
+ super(os, fileName, layout, writeHeader, destination);
this.isAppend = append;
this.isLocking = locking;
this.advertiseURI = advertiseURI;
@@ -126,7 +129,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.
@@ -202,13 +205,21 @@ public class FileManager extends OutputStreamManager {
try {
os = new FileOutputStream(name, data.append);
int bufferSize = data.bufferSize;
+
+ ByteBufferDestination destination = null;
+
+ // if Constants.ENABLE_THREADLOCALS is true, we use ByteBufferDestination to buffer the data
if (data.bufferedIO) {
- os = new BufferedOutputStream(os, bufferSize);
+ if (Constants.ENABLE_THREADLOCALS) {
+ destination = new OutputStreamByteBufferDestinationAdapter(os, bufferSize);
+ } else {
+ os = new BufferedOutputStream(os, bufferSize);
+ }
} else {
bufferSize = -1; // signals to RollingFileManager not to use BufferedOutputStream
}
return new FileManager(name, os, data.append, data.locking, data.advertiseURI, data.layout, bufferSize,
- writeHeader);
+ writeHeader, destination);
} catch (final FileNotFoundException ex) {
LOGGER.error("FileManager (" + name + ") " + ex, ex);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a0ffd098/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..314093f 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,7 +32,10 @@ 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.layout.ByteBufferDestination;
+import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.core.util.Log4jThread;
+import org.apache.logging.log4j.core.util.OutputStreamByteBufferDestinationAdapter;
/**
* The Rolling File Manager.
@@ -57,8 +60,9 @@ public class RollingFileManager extends FileManager {
protected RollingFileManager(final String fileName, final String pattern, final OutputStream os,
final boolean append, final long size, final long time, final TriggeringPolicy triggeringPolicy,
final RolloverStrategy rolloverStrategy, final String advertiseURI,
- final Layout<? extends Serializable> layout, final int bufferSize, final boolean writeHeader) {
- super(fileName, os, append, false, advertiseURI, layout, bufferSize, writeHeader);
+ final Layout<? extends Serializable> layout, final int bufferSize, final boolean writeHeader,
+ final ByteBufferDestination destination) {
+ super(fileName, os, append, false, advertiseURI, layout, bufferSize, writeHeader, destination);
this.size = size;
this.initialTime = time;
this.triggeringPolicy = triggeringPolicy;
@@ -134,9 +138,16 @@ 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()));
+
+ if (getBufferSize() > 0) {
+ if (Constants.ENABLE_THREADLOCALS) {
+ byteBufferDestination.setOutputStream(os);
+ setOutputStream(os);
+ } else {
+ setOutputStream(new BufferedOutputStream(os, getBufferSize()));
+ }
} else {
+ // Negative buffer size means no buffering.
setOutputStream(os);
}
}
@@ -398,18 +409,26 @@ public class RollingFileManager extends FileManager {
}
final long size = data.append ? file.length() : 0;
+ ByteBufferDestination destination = null;
OutputStream os;
try {
os = new FileOutputStream(name, data.append);
int bufferSize = data.bufferSize;
+
+ // if Constants.ENABLE_THREADLOCALS is true,
+ // we use ByteBufferDestination to buffer the data
if (data.bufferedIO) {
- os = new BufferedOutputStream(os, bufferSize);
+ if (Constants.ENABLE_THREADLOCALS) {
+ destination = new OutputStreamByteBufferDestinationAdapter(os, bufferSize);
+ } else {
+ os = new BufferedOutputStream(os, bufferSize);
+ }
} else {
bufferSize = -1; // negative buffer size signals bufferedIO was configured false
}
final long time = file.lastModified(); // LOG4J2-531 create file first so time has valid value
return new RollingFileManager(name, data.pattern, os, data.append, size, time, data.policy,
- data.strategy, data.advertiseURI, data.layout, bufferSize, writeHeader);
+ data.strategy, data.advertiseURI, data.layout, bufferSize, writeHeader, destination);
} catch (final FileNotFoundException ex) {
LOGGER.error("FileManager (" + name + ") " + ex, ex);
}