--- log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java.orig 2015-01-14 16:15:26.986141921 +0000 +++ log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.java 2015-01-14 16:16:08.850994955 +0000 @@ -47,7 +47,7 @@ private final M manager; - private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); + protected final ReadWriteLock rwLock = new ReentrantReadWriteLock(); private final Lock readLock = rwLock.readLock(); /** @@ -92,6 +92,10 @@ manager.release(); } + protected Lock getLock() { + return rwLock.readLock(); + } + /** * Actual writing occurs here. *
@@ -103,7 +107,7 @@
*/
@Override
public void append(final LogEvent event) {
- readLock.lock();
+ getLock().lock();
try {
final byte[] bytes = getLayout().toByteArray(event);
if (bytes.length > 0) {
@@ -116,7 +120,7 @@
error("Unable to write to stream " + manager.getName() + " for appender " + getName());
throw ex;
} finally {
- readLock.unlock();
+ getLock().unlock();
}
}
}
--- log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java.orig 2015-01-13 21:39:08.686168687 +0000
+++ log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SyslogAppenderTest.java 2015-01-13 21:39:29.798590605 +0000
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.net.SocketException;
+import java.util.ArrayList;
import org.apache.logging.log4j.core.net.Facility;
import org.apache.logging.log4j.core.net.mock.MockSyslogServerFactory;
@@ -78,6 +79,31 @@
root.removeAppender(appender);
appender.stop();
}
+
+ @Test
+ public void testUDPAppenderInParallel() throws Exception {
+ initUDPTestEnvironment("bsd");
+
+ ArrayList