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/06 20:11:38 UTC

[02/18] logging-log4j2 git commit: LOG4J2-1343 Added OutputStreamManagerDestination that adapts an OutputStreamManager to the ByteBufferDestination interface

LOG4J2-1343 Added OutputStreamManagerDestination that adapts an OutputStreamManager to the ByteBufferDestination interface


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

Branch: refs/heads/master
Commit: 49878b435b97f6f771a0f02e2621aabfb3b25d60
Parents: a95eeb8
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 02:53:44 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 02:53:44 2016 +0900

----------------------------------------------------------------------
 .../OutputStreamManagerDestination.java         | 59 ++++++++++++++++++++
 1 file changed, 59 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/49878b43/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManagerDestination.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManagerDestination.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManagerDestination.java
new file mode 100644
index 0000000..18689a1
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManagerDestination.java
@@ -0,0 +1,59 @@
+/*
+ * 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.core.appender;
+
+import java.nio.ByteBuffer;
+import java.util.Objects;
+
+import org.apache.logging.log4j.core.layout.ByteBufferDestination;
+
+/**
+ * Decorates an {@code OutputStreamManager} to adapt it to the {@code ByteBufferDestination} interface.
+ */
+public class OutputStreamManagerDestination implements ByteBufferDestination {
+    private static final int DEFAULT_BUFFER_SIZE = 8 * 1024;
+    private final ByteBuffer byteBuffer;
+    private final boolean immediateFlush;
+    private final OutputStreamManager outputStreamManager;
+
+    public OutputStreamManagerDestination(final boolean immediateFlush, final OutputStreamManager outputStreamManager) {
+        this(DEFAULT_BUFFER_SIZE, immediateFlush, outputStreamManager);
+    }
+
+    public OutputStreamManagerDestination(final int bufferSize, final boolean immediateFlush,
+            final OutputStreamManager outputStreamManager) {
+
+        this.byteBuffer = ByteBuffer.wrap(new byte[bufferSize]);
+        this.immediateFlush = immediateFlush;
+        this.outputStreamManager = Objects.requireNonNull(outputStreamManager, "outputStreamManager");
+    }
+
+    @Override
+    public ByteBuffer getByteBuffer() {
+        return byteBuffer;
+    }
+
+    @Override
+    public ByteBuffer drain(final ByteBuffer buf) {
+        buf.flip();
+        if (buf.limit() > 0) {
+            outputStreamManager.write(buf.array(), 0, buf.limit(), immediateFlush);
+        }
+        buf.clear();
+        return buf;
+    }
+}