You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/09/03 07:23:57 UTC
[5/6] git commit: Fold down util package.
Fold down util package.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e8d75eee
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e8d75eee
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e8d75eee
Branch: refs/heads/master
Commit: e8d75eeece5ae2f490a13c05ded532a99d17d62d
Parents: ffc1a38
Author: Matt Sicker <ma...@apache.org>
Authored: Wed Sep 3 00:21:54 2014 -0500
Committer: Matt Sicker <ma...@apache.org>
Committed: Wed Sep 3 00:21:54 2014 -0500
----------------------------------------------------------------------
.../logging/log4j/io/ByteStreamLogger.java | 152 +++++++++++++++++++
.../logging/log4j/io/CharStreamLogger.java | 110 ++++++++++++++
.../log4j/io/LoggerFilterOutputStream.java | 1 -
.../logging/log4j/io/LoggerFilterWriter.java | 1 -
.../logging/log4j/io/LoggerInputStream.java | 1 -
.../logging/log4j/io/LoggerOutputStream.java | 1 -
.../apache/logging/log4j/io/LoggerReader.java | 1 -
.../apache/logging/log4j/io/LoggerWriter.java | 1 -
.../logging/log4j/io/util/ByteStreamLogger.java | 152 -------------------
.../logging/log4j/io/util/CharStreamLogger.java | 110 --------------
10 files changed, 262 insertions(+), 268 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/ByteStreamLogger.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/ByteStreamLogger.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/ByteStreamLogger.java
new file mode 100644
index 0000000..42c4c63
--- /dev/null
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/ByteStreamLogger.java
@@ -0,0 +1,152 @@
+/*
+ * 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.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.spi.ExtendedLogger;
+
+public class ByteStreamLogger {
+ private class ByteBufferInputStream extends InputStream {
+
+ @Override
+ public int read() throws IOException {
+ ByteStreamLogger.this.buf.flip();
+ int result = -1;
+ if (ByteStreamLogger.this.buf.limit() > 0) {
+ result = ByteStreamLogger.this.buf.get() & 0xFF;
+ }
+ ByteStreamLogger.this.buf.compact();
+ return result;
+ }
+
+ @Override
+ public int read(final byte[] bytes, final int off, final int len) throws IOException {
+ ByteStreamLogger.this.buf.flip();
+ int result = -1;
+ if (ByteStreamLogger.this.buf.limit() > 0) {
+ result = Math.min(len, ByteStreamLogger.this.buf.limit());
+ ByteStreamLogger.this.buf.get(bytes, off, result);
+ }
+ ByteStreamLogger.this.buf.compact();
+ return result;
+ }
+ }
+
+ private static final int BUFFER_SIZE = 1024;
+ private final ExtendedLogger logger;
+ private final Level level;
+ private final Marker marker;
+ private final ByteBufferInputStream inputStream;
+ private final InputStreamReader reader;
+ private final char[] msgBuf = new char[BUFFER_SIZE];
+ private final StringBuilder msg = new StringBuilder();
+ private boolean closed;
+
+ private final ByteBuffer buf = ByteBuffer.allocate(BUFFER_SIZE);
+
+ public ByteStreamLogger(final ExtendedLogger logger, final Level level, final Marker marker, final Charset charset) {
+ this.logger = logger;
+ this.level = level;
+ this.marker = marker;
+ this.inputStream = new ByteBufferInputStream();
+ this.reader = new InputStreamReader(this.inputStream, charset);
+ }
+
+ public void close(final String fqcn) {
+ synchronized (this.msg) {
+ this.closed = true;
+ logEnd(fqcn);
+// in.close();
+ }
+ }
+
+ private void extractMessages(final String fqcn) throws IOException {
+ if (this.closed) {
+ return;
+ }
+ int read = this.reader.read(this.msgBuf);
+ while (read > 0) {
+ int off = 0;
+ for (int pos = 0; pos < read; pos++) {
+ switch (this.msgBuf[pos]) {
+ case '\r':
+ this.msg.append(this.msgBuf, off, pos - off);
+ off = pos + 1;
+ break;
+ case '\n':
+ this.msg.append(this.msgBuf, off, pos - off);
+ off = pos + 1;
+ log(fqcn);
+ break;
+ }
+ }
+ this.msg.append(this.msgBuf, off, read - off);
+ read = this.reader.read(this.msgBuf);
+ }
+ }
+
+ private void log(final String fqcn) {
+ // convert to string now so async loggers work
+ this.logger.logIfEnabled(fqcn, this.level, this.marker, this.msg.toString());
+ this.msg.setLength(0);
+ }
+
+ private void logEnd(final String fqcn) {
+ if (this.msg.length() > 0) {
+ log(fqcn);
+ }
+ }
+
+ public void put(final String fqcn, final byte[] b, final int off, final int len) throws IOException {
+ int curOff = off;
+ int curLen = len;
+ if (curLen >= 0) {
+ synchronized (this.msg) {
+ while (curLen > this.buf.remaining()) {
+ final int remaining = this.buf.remaining();
+ this.buf.put(b, curOff, remaining);
+ curLen -= remaining;
+ curOff += remaining;
+ extractMessages(fqcn);
+ }
+ this.buf.put(b, curOff, curLen);
+ extractMessages(fqcn);
+ }
+ } else {
+ logEnd(fqcn);
+ }
+ }
+
+ public void put(final String fqcn, final int b) throws IOException {
+ if (b >= 0) {
+ synchronized (this.msg) {
+ this.buf.put((byte) (b & 0xFF));
+ extractMessages(fqcn);
+ }
+ } else {
+ logEnd(fqcn);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/CharStreamLogger.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/CharStreamLogger.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/CharStreamLogger.java
new file mode 100644
index 0000000..f3977d8
--- /dev/null
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/CharStreamLogger.java
@@ -0,0 +1,110 @@
+/*
+ * 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.io;
+
+import java.nio.CharBuffer;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.spi.ExtendedLogger;
+
+public class CharStreamLogger {
+ private final ExtendedLogger logger;
+ private final Level level;
+ private final Marker marker;
+ private final StringBuilder msg = new StringBuilder();
+ private boolean closed = false;
+
+ public CharStreamLogger(final ExtendedLogger logger, final Level level, final Marker marker) {
+ this.logger = logger;
+ this.level = level;
+ this.marker = marker;
+ }
+
+ public void close(final String fqcn) {
+ synchronized (this.msg) {
+ this.closed = true;
+ logEnd(fqcn);
+ }
+ }
+
+ private void log(final String fqcn) {
+ // convert to string now so async loggers work
+ this.logger.logIfEnabled(fqcn, this.level, this.marker, this.msg.toString());
+ this.msg.setLength(0);
+ }
+
+ private void logEnd(final String fqcn) {
+ if (this.msg.length() > 0) {
+ log(fqcn);
+ }
+ }
+
+ public void put(final String fqcn, final char[] cbuf, final int off, final int len) {
+ put(fqcn, CharBuffer.wrap(cbuf), off, len);
+ }
+
+ public void put(final String fqcn, final CharSequence str, final int off, final int len) {
+ if (len >= 0) {
+ synchronized (this.msg) {
+ if (this.closed) {
+ return;
+ }
+ int start = off;
+ final int end = off + len;
+ for (int pos = off; pos < end; pos++) {
+ final char c = str.charAt(pos);
+ switch (c) {
+ case '\r':
+ case '\n':
+ this.msg.append(str, start, pos);
+ start = pos + 1;
+ if (c == '\n') {
+ log(fqcn);
+ }
+ break;
+ }
+ }
+ this.msg.append(str, start, end);
+ }
+ } else {
+ logEnd(fqcn);
+ }
+ }
+
+ public void put(final String fqcn, final int c) {
+ if (c >= 0) {
+ synchronized (this.msg) {
+ if (this.closed) {
+ return;
+ }
+ switch (c) {
+ case '\n':
+ log(fqcn);
+ break;
+ case '\r':
+ break;
+ default:
+ this.msg.append((char) c);
+ }
+ }
+ } else {
+ logEnd(fqcn);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java
index b9e6d78..d17544c 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterOutputStream.java
@@ -25,7 +25,6 @@ import java.nio.charset.Charset;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.ByteStreamLogger;
/**
* Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java
index a700f92..5a9d8e0 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerFilterWriter.java
@@ -24,7 +24,6 @@ import java.io.Writer;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.CharStreamLogger;
/**
* Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java
index 873723f..445e366 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerInputStream.java
@@ -25,7 +25,6 @@ import java.nio.charset.Charset;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.ByteStreamLogger;
/**
* Logs each line read to a pre-defined level. Can also be configured with a Marker.
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java
index f0ab698..0d1829b 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerOutputStream.java
@@ -24,7 +24,6 @@ import java.nio.charset.Charset;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.ByteStreamLogger;
/**
* Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java
index 658a988..48427f8 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerReader.java
@@ -25,7 +25,6 @@ import java.nio.CharBuffer;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.CharStreamLogger;
/**
* Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java
index 70118e8..70310ad 100644
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java
+++ b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/LoggerWriter.java
@@ -23,7 +23,6 @@ import java.io.Writer;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.io.util.CharStreamLogger;
/**
* Logs each line written to a pre-defined level. Can also be configured with a Marker. This class provides an interface
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/ByteStreamLogger.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/ByteStreamLogger.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/ByteStreamLogger.java
deleted file mode 100644
index bbba82e..0000000
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/ByteStreamLogger.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * 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.io.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.spi.ExtendedLogger;
-
-public class ByteStreamLogger {
- private class ByteBufferInputStream extends InputStream {
-
- @Override
- public int read() throws IOException {
- ByteStreamLogger.this.buf.flip();
- int result = -1;
- if (ByteStreamLogger.this.buf.limit() > 0) {
- result = ByteStreamLogger.this.buf.get() & 0xFF;
- }
- ByteStreamLogger.this.buf.compact();
- return result;
- }
-
- @Override
- public int read(final byte[] bytes, final int off, final int len) throws IOException {
- ByteStreamLogger.this.buf.flip();
- int result = -1;
- if (ByteStreamLogger.this.buf.limit() > 0) {
- result = Math.min(len, ByteStreamLogger.this.buf.limit());
- ByteStreamLogger.this.buf.get(bytes, off, result);
- }
- ByteStreamLogger.this.buf.compact();
- return result;
- }
- }
-
- private static final int BUFFER_SIZE = 1024;
- private final ExtendedLogger logger;
- private final Level level;
- private final Marker marker;
- private final ByteBufferInputStream inputStream;
- private final InputStreamReader reader;
- private final char[] msgBuf = new char[BUFFER_SIZE];
- private final StringBuilder msg = new StringBuilder();
- private boolean closed;
-
- private final ByteBuffer buf = ByteBuffer.allocate(BUFFER_SIZE);
-
- public ByteStreamLogger(final ExtendedLogger logger, final Level level, final Marker marker, final Charset charset) {
- this.logger = logger;
- this.level = level;
- this.marker = marker;
- this.inputStream = new ByteBufferInputStream();
- this.reader = new InputStreamReader(this.inputStream, charset);
- }
-
- public void close(final String fqcn) {
- synchronized (this.msg) {
- this.closed = true;
- logEnd(fqcn);
-// in.close();
- }
- }
-
- private void extractMessages(final String fqcn) throws IOException {
- if (this.closed) {
- return;
- }
- int read = this.reader.read(this.msgBuf);
- while (read > 0) {
- int off = 0;
- for (int pos = 0; pos < read; pos++) {
- switch (this.msgBuf[pos]) {
- case '\r':
- this.msg.append(this.msgBuf, off, pos - off);
- off = pos + 1;
- break;
- case '\n':
- this.msg.append(this.msgBuf, off, pos - off);
- off = pos + 1;
- log(fqcn);
- break;
- }
- }
- this.msg.append(this.msgBuf, off, read - off);
- read = this.reader.read(this.msgBuf);
- }
- }
-
- private void log(final String fqcn) {
- // convert to string now so async loggers work
- this.logger.logIfEnabled(fqcn, this.level, this.marker, this.msg.toString());
- this.msg.setLength(0);
- }
-
- private void logEnd(final String fqcn) {
- if (this.msg.length() > 0) {
- log(fqcn);
- }
- }
-
- public void put(final String fqcn, final byte[] b, final int off, final int len) throws IOException {
- int curOff = off;
- int curLen = len;
- if (curLen >= 0) {
- synchronized (this.msg) {
- while (curLen > this.buf.remaining()) {
- final int remaining = this.buf.remaining();
- this.buf.put(b, curOff, remaining);
- curLen -= remaining;
- curOff += remaining;
- extractMessages(fqcn);
- }
- this.buf.put(b, curOff, curLen);
- extractMessages(fqcn);
- }
- } else {
- logEnd(fqcn);
- }
- }
-
- public void put(final String fqcn, final int b) throws IOException {
- if (b >= 0) {
- synchronized (this.msg) {
- this.buf.put((byte) (b & 0xFF));
- extractMessages(fqcn);
- }
- } else {
- logEnd(fqcn);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e8d75eee/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/CharStreamLogger.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/CharStreamLogger.java b/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/CharStreamLogger.java
deleted file mode 100644
index 6107796..0000000
--- a/log4j-iostreams/src/main/java/org/apache/logging/log4j/io/util/CharStreamLogger.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.io.util;
-
-import java.nio.CharBuffer;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.spi.ExtendedLogger;
-
-public class CharStreamLogger {
- private final ExtendedLogger logger;
- private final Level level;
- private final Marker marker;
- private final StringBuilder msg = new StringBuilder();
- private boolean closed = false;
-
- public CharStreamLogger(final ExtendedLogger logger, final Level level, final Marker marker) {
- this.logger = logger;
- this.level = level;
- this.marker = marker;
- }
-
- public void close(final String fqcn) {
- synchronized (this.msg) {
- this.closed = true;
- logEnd(fqcn);
- }
- }
-
- private void log(final String fqcn) {
- // convert to string now so async loggers work
- this.logger.logIfEnabled(fqcn, this.level, this.marker, this.msg.toString());
- this.msg.setLength(0);
- }
-
- private void logEnd(final String fqcn) {
- if (this.msg.length() > 0) {
- log(fqcn);
- }
- }
-
- public void put(final String fqcn, final char[] cbuf, final int off, final int len) {
- put(fqcn, CharBuffer.wrap(cbuf), off, len);
- }
-
- public void put(final String fqcn, final CharSequence str, final int off, final int len) {
- if (len >= 0) {
- synchronized (this.msg) {
- if (this.closed) {
- return;
- }
- int start = off;
- final int end = off + len;
- for (int pos = off; pos < end; pos++) {
- final char c = str.charAt(pos);
- switch (c) {
- case '\r':
- case '\n':
- this.msg.append(str, start, pos);
- start = pos + 1;
- if (c == '\n') {
- log(fqcn);
- }
- break;
- }
- }
- this.msg.append(str, start, end);
- }
- } else {
- logEnd(fqcn);
- }
- }
-
- public void put(final String fqcn, final int c) {
- if (c >= 0) {
- synchronized (this.msg) {
- if (this.closed) {
- return;
- }
- switch (c) {
- case '\n':
- log(fqcn);
- break;
- case '\r':
- break;
- default:
- this.msg.append((char) c);
- }
- }
- } else {
- logEnd(fqcn);
- }
- }
-}