You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/01/12 17:50:51 UTC
[43/50] logging-log4j2 git commit: [LOG4J2-1230] Don't concatenate
SYSLOG Messages.
[LOG4J2-1230] Don't concatenate SYSLOG Messages.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5b1404b6
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5b1404b6
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5b1404b6
Branch: refs/heads/LOG4J-1181
Commit: 5b1404b6b7ed4a3616111d507ebd819f8a07dd7d
Parents: 711278b
Author: ggregory <gg...@apache.org>
Authored: Mon Jan 4 23:32:11 2016 -0800
Committer: ggregory <gg...@apache.org>
Committed: Mon Jan 4 23:32:11 2016 -0800
----------------------------------------------------------------------
.../appender/AbstractOutputStreamAppender.java | 13 ++------
.../log4j/core/appender/FileManager.java | 6 ++--
.../core/appender/MemoryMappedFileManager.java | 4 +--
.../core/appender/OutputStreamManager.java | 32 ++++++++++++++++++--
.../core/appender/RandomAccessFileManager.java | 6 ++--
.../appender/rolling/RollingFileManager.java | 4 +--
.../rolling/RollingRandomAccessFileManager.java | 6 ++--
.../log4j/core/net/TcpSocketManager.java | 8 +++--
.../appender/RandomAccessFileManagerTest.java | 2 +-
.../RollingRandomAccessFileManagerTest.java | 9 +++---
src/changes/changes.xml | 3 ++
11 files changed, 59 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
index 5ab28d5..9a4cfde 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java
@@ -44,9 +44,6 @@ public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager
private final M manager;
- private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
- private final Lock readLock = rwLock.readLock();
-
/**
* Instantiates a WriterAppender and set the output destination to a new {@link java.io.OutputStreamWriter}
* initialized with <code>os</code> as its {@link java.io.OutputStream}.
@@ -107,20 +104,14 @@ public abstract class AbstractOutputStreamAppender<M extends OutputStreamManager
*/
@Override
public void append(final LogEvent event) {
- readLock.lock();
try {
final byte[] bytes = getLayout().toByteArray(event);
- if (bytes.length > 0) {
- manager.write(bytes);
- if (this.immediateFlush || event.isEndOfBatch()) {
- manager.flush();
- }
+ if (bytes != null && bytes.length > 0) {
+ manager.write(bytes, this.immediateFlush || event.isEndOfBatch());
}
} catch (final AppenderLoggingException ex) {
error("Unable to write to stream " + manager.getName() + " for appender " + getName());
throw ex;
- } finally {
- readLock.unlock();
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/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 827a9c0..4de34ad 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
@@ -76,7 +76,7 @@ public class FileManager extends OutputStreamManager {
}
@Override
- protected synchronized void write(final byte[] bytes, final int offset, final int length) {
+ protected synchronized void write(final byte[] bytes, final int offset, final int length, final boolean immediateFlush) {
if (isLocking) {
final FileChannel channel = ((FileOutputStream) getOutputStream()).getChannel();
@@ -90,7 +90,7 @@ public class FileManager extends OutputStreamManager {
files strings are configured that somehow map to the same file.*/
final FileLock lock = channel.lock(0, Long.MAX_VALUE, false);
try {
- super.write(bytes, offset, length);
+ super.write(bytes, offset, length, immediateFlush);
} finally {
lock.release();
}
@@ -99,7 +99,7 @@ public class FileManager extends OutputStreamManager {
}
} else {
- super.write(bytes, offset, length);
+ super.write(bytes, offset, length, immediateFlush);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
index 7bd0eb5..9335ddb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
@@ -111,8 +111,8 @@ public class MemoryMappedFileManager extends OutputStreamManager {
}
@Override
- protected synchronized void write(final byte[] bytes, int offset, int length) {
- super.write(bytes, offset, length); // writes to dummy output stream
+ protected synchronized void write(final byte[] bytes, int offset, int length, final boolean immediateFlush) {
+ super.write(bytes, offset, length, immediateFlush); // writes to dummy output stream
while (length > mappedBuffer.remaining()) {
final int chunk = mappedBuffer.remaining();
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/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 99c3321..42eaa34 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
@@ -117,10 +117,26 @@ public class OutputStreamManager extends AbstractManager {
* @param length The number of bytes to write.
* @throws AppenderLoggingException if an error occurs.
*/
- protected synchronized void write(final byte[] bytes, final int offset, final int length) {
- //System.out.println("write " + count);
+ protected void write(final byte[] bytes, final int offset, final int length) {
+ write(bytes, offset, length, false);
+ }
+
+ /**
+ * Some output streams synchronize writes while others do not. Synchronizing here insures that
+ * log events won't be intertwined.
+ * @param bytes The serialized Log event.
+ * @param offset The offset into the byte array.
+ * @param length The number of bytes to write.
+ * @param immediateFlush flushes immediately after writing.
+ * @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);
try {
os.write(bytes, offset, length);
+ if (immediateFlush) {
+ os.flush();
+ }
} catch (final IOException ex) {
final String msg = "Error writing to stream " + getName();
throw new AppenderLoggingException(msg, ex);
@@ -133,7 +149,17 @@ public class OutputStreamManager extends AbstractManager {
* @throws AppenderLoggingException if an error occurs.
*/
protected void write(final byte[] bytes) {
- write(bytes, 0, bytes.length);
+ write(bytes, 0, bytes.length, false);
+ }
+
+ /**
+ * Some output streams synchronize writes while others do not.
+ * @param bytes The serialized Log event.
+ * @param writeAndFlush If true, flushes after writing.
+ * @throws AppenderLoggingException if an error occurs.
+ */
+ protected void write(final byte[] bytes, boolean immediateFlush) {
+ write(bytes, 0, bytes.length, immediateFlush);
}
protected synchronized void close() {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
index c6627df..12af7ee 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileManager.java
@@ -85,8 +85,8 @@ public class RandomAccessFileManager extends OutputStreamManager {
}
@Override
- protected synchronized void write(final byte[] bytes, int offset, int length) {
- super.write(bytes, offset, length); // writes to dummy output stream
+ protected synchronized void write(final byte[] bytes, int offset, int length, final boolean immediateFlush) {
+ super.write(bytes, offset, length, immediateFlush); // writes to dummy output stream
int chunk = 0;
do {
@@ -99,7 +99,7 @@ public class RandomAccessFileManager extends OutputStreamManager {
length -= chunk;
} while (length > 0);
- if (isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) {
+ if (immediateFlush || isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) {
flush();
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/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 48ff472..fc77a98 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
@@ -89,9 +89,9 @@ public class RollingFileManager extends FileManager {
}
@Override
- protected synchronized void write(final byte[] bytes, final int offset, final int length) {
+ protected synchronized void write(final byte[] bytes, final int offset, final int length, final boolean immediateFlush) {
size += length;
- super.write(bytes, offset, length);
+ super.write(bytes, offset, length, immediateFlush);
}
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
index b732feb..56a1b47 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
@@ -94,8 +94,8 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
}
@Override
- protected synchronized void write(final byte[] bytes, int offset, int length) {
- super.write(bytes, offset, length); // writes to dummy output stream, needed to track file size
+ protected synchronized void write(final byte[] bytes, int offset, int length, final boolean immediateFlush) {
+ super.write(bytes, offset, length, immediateFlush); // writes to dummy output stream, needed to track file size
int chunk = 0;
do {
@@ -108,7 +108,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
length -= chunk;
} while (length > 0);
- if (isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) {
+ if (immediateFlush || isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) {
flush();
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
index a487438..d518aee 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
@@ -116,7 +116,7 @@ public class TcpSocketManager extends AbstractSocketManager {
}
@Override
- protected void write(final byte[] bytes, final int offset, final int length) {
+ protected void write(final byte[] bytes, final int offset, final int length, boolean immediateFlush) {
if (socket == null) {
if (connector != null && !immediateFail) {
connector.latch();
@@ -128,7 +128,11 @@ public class TcpSocketManager extends AbstractSocketManager {
}
synchronized (this) {
try {
- getOutputStream().write(bytes, offset, length);
+ final OutputStream outputStream = getOutputStream();
+ outputStream.write(bytes, offset, length);
+ if (immediateFlush) {
+ outputStream.flush();
+ }
} catch (final IOException ex) {
if (retry && connector == null) {
connector = new Reconnector(this);
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
index f127db3..07e8ab2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
@@ -130,7 +130,7 @@ public class RandomAccessFileManagerTest {
final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(
file.getAbsolutePath(), isAppend, true, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null);
- manager.write(bytes, 0, bytes.length);
+ manager.write(bytes, 0, bytes.length, false);
final int expected = bytes.length * 2;
assertEquals("appended, not overwritten", expected, file.length());
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
index d96d75e..4baddac 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
@@ -66,7 +66,7 @@ public class RollingRandomAccessFileManagerTest {
final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3;
final byte[] data = new byte[size];
- manager.write(data, 0, data.length); // no buffer overflow exception
+ manager.write(data, 0, data.length, flushNow); // no buffer overflow exception
// buffer is full but not flushed yet
assertEquals(RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 2,
@@ -97,7 +97,7 @@ public class RollingRandomAccessFileManagerTest {
final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1;
final byte[] data = new byte[size];
- manager.write(data, 0, data.length); // no exception
+ manager.write(data, 0, data.length, flushNow); // no exception
assertEquals(RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3,
raf.length());
@@ -146,13 +146,14 @@ public class RollingRandomAccessFileManagerTest {
}
assertThat("all flushed to disk", file, hasLength(bytes.length));
+ final boolean immediateFlush = true;
final RollingRandomAccessFileManager manager = RollingRandomAccessFileManager
.getRollingRandomAccessFileManager(
//
- file.getAbsolutePath(), Strings.EMPTY, isAppend, true, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE,
+ file.getAbsolutePath(), Strings.EMPTY, isAppend, immediateFlush, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE,
new SizeBasedTriggeringPolicy(Long.MAX_VALUE), //
null, null, null);
- manager.write(bytes, 0, bytes.length);
+ manager.write(bytes, 0, bytes.length, immediateFlush);
final int expected = bytes.length * 2;
assertThat("appended, not overwritten", file, hasLength(expected));
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b1404b6/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0664458..3182a0c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -37,6 +37,9 @@
<action issue="LOG4J2-908" dev="ggregory" type="fix" due-to="Konstantinos Liakos, Patrick Flaherty, Robin Coe, Gary Gregory">
JSONLayout doesn't add a comma between log events.
</action>
+ <action issue="LOG4J2-1230" dev="ggregory" type="fix" due-to="Vladimir Hudec, Ralph Goers, Gary Gregory">
+ Don't concatenate SYSLOG Messages.
+ </action>
<action issue="LOG4J2-1238" dev="ggregory" type="fix">
org.apache.logging.log4j.core.net.TcpSocketManager and other classes does not report internal exceptions to the status logger.
</action>