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/08/07 13:18:37 UTC
[01/38] logging-log4j2 git commit: Add missing @since 2.6.
Repository: logging-log4j2
Updated Branches:
refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure c846a7572 -> 39501130f
Add missing @since 2.6.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/7ca4dfec
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/7ca4dfec
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/7ca4dfec
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 7ca4dfecfb8890b02f401aa33bd96bff01bac90d
Parents: 641014d
Author: Gary Gregory <gg...@apache.org>
Authored: Tue Aug 2 08:36:50 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Aug 2 08:36:50 2016 -0700
----------------------------------------------------------------------
log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7ca4dfec/log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java
index acf154c..bb59d46 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Unbox.java
@@ -43,6 +43,7 @@ import org.apache.logging.log4j.status.StatusLogger;
* If more slots are required, set system property {@code log4j.unbox.ringbuffer.size} to the desired ring buffer size.
* Note that the specified number will be rounded up to the nearest power of 2.
* </p>
+ * @since 2.6
*/
@PerformanceSensitive("allocation")
public class Unbox {
[33/38] logging-log4j2 git commit: [LOG4J2-1500] Merging
configurations fail with an NPE when comparing Nodes with different
attributes. Closes #37.
Posted by rp...@apache.org.
[LOG4J2-1500] Merging configurations fail with an NPE when comparing
Nodes with different attributes. Closes #37.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/d1c02ee5
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/d1c02ee5
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/d1c02ee5
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: d1c02ee5e3a863528dfad66a9bbd17c45d475a25
Parents: 5b7b75d
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 17:52:25 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 17:52:25 2016 -0700
----------------------------------------------------------------------
.../config/composite/DefaultMergeStrategy.java | 6 ++-
.../core/config/CompositeConfigurationTest.java | 19 ++++++++
.../test/resources/log4j-comp-root-loggers.xml | 46 ++++++++++++++++++++
src/changes/changes.xml | 3 ++
4 files changed, 72 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
index 0263ec2..c799e1d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
@@ -260,10 +260,12 @@ public class DefaultMergeStrategy implements MergeStrategy {
}
private boolean isSameName(final Node node1, final Node node2) {
- return node1.getAttributes().get(NAME).toLowerCase().equals(node2.getAttributes().get(NAME).toLowerCase());
+ final String value = node1.getAttributes().get(NAME);
+ return value != null && value.toLowerCase().equals(node2.getAttributes().get(NAME).toLowerCase());
}
private boolean isSameReference(final Node node1, final Node node2) {
- return node1.getAttributes().get(REF).toLowerCase().equals(node2.getAttributes().get(REF).toLowerCase());
+ final String value = node1.getAttributes().get(REF);
+ return value != null && value.toLowerCase().equals(node2.getAttributes().get(REF).toLowerCase());
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
index a4ffa73..8482cf4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.util.Map;
@@ -26,6 +27,7 @@ import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.config.composite.CompositeConfiguration;
import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
@@ -110,6 +112,23 @@ public class CompositeConfigurationTest {
};
runTest(lcr, test);
}
+
+ @Test
+ public void testAttributeCheckWhenMergingConfigurations() {
+ final LoggerContextRule lcr = new LoggerContextRule("classpath:log4j-comp-root-loggers.xml,log4j-comp-logger.json");
+ final Statement test = new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ try {
+ final CompositeConfiguration config = (CompositeConfiguration) lcr.getConfiguration();
+ Assert.assertNotNull(config);
+ } catch (NullPointerException e) {
+ fail("Should not throw NullPointerException when there are different nodes.");
+ }
+ }
+ };
+ runTest(lcr, test);
+ }
/*
@Test
public void overrideFilter() {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-comp-root-loggers.xml b/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
new file mode 100644
index 0000000..79ea7e5
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+
+-->
+<Configuration status="ERROR" name="LoggerConfigTest">
+ <Appenders>
+ <Console name="STDOUT">
+ <PatternLayout pattern="%m%n"/>
+ </Console>
+ <File name="File" fileName="${filename}" bufferedIO="false">
+ <PatternLayout>
+ <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
+ </PatternLayout>
+ </File>
+ </Appenders>
+
+ <Loggers>
+ <Logger name="cat1" level="debug" additivity="false">
+ <AppenderRef ref="File"/>
+ </Logger>
+
+ <Logger name="cat3" level="debug" additivity="false">
+ <AppenderRef ref="File"/>
+ </Logger>
+
+ <Root level="error">
+ <AppenderRef ref="STDOUT"/>
+ <Property name="hostname">server1</Property>
+ </Root>
+ </Loggers>
+
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cceb355..77bc02b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+ <action issue="LOG4J2-1500" dev="ggregory" type="fix" due-to="Jose Leon">
+ Merging configurations fail with an NPE when comparing Nodes with different attributes.
+ </action>
<action issue="LOG4J2-1482" dev="ggregory" type="fix" due-to="Gary Gregory, Sumit Singhal">
Improper header in CsvParameterLayout.
</action>
[12/38] logging-log4j2 git commit: Remove useless parens.
Posted by rp...@apache.org.
Remove useless parens.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/248efa48
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/248efa48
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/248efa48
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 248efa48a4a3d7583b17768866ba911caa4c35ac
Parents: ffc6c8f
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 15:27:40 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 15:27:40 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/async/RingBufferLogEvent.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/248efa48/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
index 463536c..c4de9d4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
@@ -200,7 +200,7 @@ public class RingBufferLogEvent implements LogEvent, ReusableMessage, CharSequen
@Override
public Message getMessage() {
if (message == null) {
- return (messageText == null) ? EMPTY : this;
+ return messageText == null ? EMPTY : this;
}
return message;
}
[04/38] logging-log4j2 git commit: Internal error messages start with
a capital letter.
Posted by rp...@apache.org.
Internal error messages start with a capital letter.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1d20db2b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1d20db2b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1d20db2b
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 1d20db2b32ab1e02986abb76aabd9abc79a37a0b
Parents: b403901
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:00:24 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:00:24 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/appender/MemoryMappedFileManager.java | 6 +++---
.../logging/log4j/core/appender/RandomAccessFileManager.java | 2 +-
.../core/appender/rolling/RollingRandomAccessFileManager.java | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1d20db2b/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 6038038..e238258 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
@@ -146,7 +146,7 @@ public class MemoryMappedFileManager extends OutputStreamManager {
this.byteBuffer = mappedBuffer;
mappingOffset = offset;
} catch (final Exception ex) {
- logError("unable to remap", ex);
+ logError("Unable to remap", ex);
}
}
@@ -162,7 +162,7 @@ public class MemoryMappedFileManager extends OutputStreamManager {
try {
unsafeUnmap(mappedBuffer);
} catch (final Exception ex) {
- logError("unable to unmap MappedBuffer", ex);
+ logError("Unable to unmap MappedBuffer", ex);
}
try {
LOGGER.debug("MMapAppender closing. Setting {} length to {} (offset {} + position {})", getFileName(),
@@ -170,7 +170,7 @@ public class MemoryMappedFileManager extends OutputStreamManager {
randomAccessFile.setLength(length);
randomAccessFile.close();
} catch (final IOException ex) {
- logError("unable to close MemoryMappedFile", ex);
+ logError("Unable to close MemoryMappedFile", ex);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1d20db2b/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 265aef0..c87bdf3 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
@@ -100,7 +100,7 @@ public class RandomAccessFileManager extends OutputStreamManager {
try {
randomAccessFile.close();
} catch (final IOException ex) {
- logError("unable to close RandomAccessFile", ex);
+ logError("Unable to close RandomAccessFile", ex);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1d20db2b/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 d51b65c..4a92beb 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
@@ -71,7 +71,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
randomAccessFile.write(header, 0, header.length);
}
} catch (final IOException e) {
- logError("unable to write header", e);
+ logError("Unable to write header", e);
}
}
@@ -129,7 +129,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
try {
randomAccessFile.close();
} catch (final IOException e) {
- logError("unable to close RandomAccessFile", e);
+ logError("Unable to close RandomAccessFile", e);
}
}
[08/38] logging-log4j2 git commit: Use TimeUnit to compute millis.
Posted by rp...@apache.org.
Use TimeUnit to compute millis.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/451a02da
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/451a02da
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/451a02da
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 451a02dae1dc26e57f9e40f780a25b7d210d8764
Parents: fd0320e
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:08:52 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:08:52 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/flume/appender/FlumePersistentManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/451a02da/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 4877ec5..668210f 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -221,7 +221,7 @@ public class FlumePersistentManager extends FlumeAvroManager {
LOGGER.debug("Shutting down FlumePersistentManager");
worker.shutdown();
try {
- worker.join(SHUTDOWN_WAIT_SECONDS * MILLIS_PER_SECOND);
+ worker.join(TimeUnit.SECONDS.toMillis(SHUTDOWN_WAIT_SECONDS));
} catch (final InterruptedException ie) {
// Ignore the exception and shutdown.
}
[35/38] logging-log4j2 git commit: Use FileLock in a
try-with-resources.
Posted by rp...@apache.org.
Use FileLock in a try-with-resources.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1a49a34e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1a49a34e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1a49a34e
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 1a49a34ee62bd1ff2cd2d757a2fa578594569a9d
Parents: 6d416f9
Author: Gary Gregory <gg...@apache.org>
Authored: Sat Aug 6 12:07:05 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sat Aug 6 12:07:05 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileManager.java | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a49a34e/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 3bb4f6c..542edbf 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
@@ -98,11 +98,8 @@ public class FileManager extends OutputStreamManager {
file is already locked by another FileChannel in the same JVM. Hopefully, that will
be avoided since every file should have a single file manager - unless two different
files strings are configured that somehow map to the same file.*/
- final FileLock lock = channel.lock(0, Long.MAX_VALUE, false);
- try {
+ try (final FileLock lock = channel.lock(0, Long.MAX_VALUE, false)) {
super.write(bytes, offset, length, immediateFlush);
- } finally {
- lock.release();
}
} catch (final IOException ex) {
throw new AppenderLoggingException("Unable to obtain lock on " + getName(), ex);
[23/38] logging-log4j2 git commit: Run test with BasicContextSelector.
Posted by rp...@apache.org.
Run test with BasicContextSelector.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e67f3ed0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e67f3ed0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e67f3ed0
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: e67f3ed0400e93afe3118066e837db0fb5ea4019
Parents: f8832e1
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:16:15 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:16:15 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/appender/JsonCompleteFileAppenderTest.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e67f3ed0/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index 739e63f..b6f8e70 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.io.FileReader;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.selector.BasicContextSelector;
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
import org.apache.logging.log4j.junit.CleanFiles;
@@ -49,7 +50,7 @@ public class JsonCompleteFileAppenderTest {
@Parameters(name = "{0}")
public static Class<?>[] getParameters() {
- return new Class<?>[] { ClassLoaderContextSelector.class };
+ return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class };
}
private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
[22/38] logging-log4j2 git commit: Parameterize
JsonCompleteFileAppenderTest.
Posted by rp...@apache.org.
Parameterize JsonCompleteFileAppenderTest.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f8832e13
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f8832e13
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f8832e13
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: f8832e1339c73148f13effb0d7234b0c14b6e3c2
Parents: 6478f94
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:15:28 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:15:28 2016 -0700
----------------------------------------------------------------------
.../appender/JsonCompleteFileAppenderTest.java | 29 ++++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f8832e13/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index d8355a3..739e63f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -16,31 +16,48 @@
*/
package org.apache.logging.log4j.core.appender;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
+import org.apache.logging.log4j.core.selector.ContextSelector;
import org.apache.logging.log4j.junit.CleanFiles;
import org.apache.logging.log4j.junit.LoggerContextRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
-
-import static org.junit.Assert.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
/**
* Tests a "complete" JSON file.
*/
+@RunWith(Parameterized.class)
public class JsonCompleteFileAppenderTest {
- private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
+ public JsonCompleteFileAppenderTest(Class<ContextSelector> contextSelector) {
+ this.init = new LoggerContextRule("JsonCompleteFileAppenderTest.xml", contextSelector);
+ this.files = new CleanFiles(logFile);
+ this.chain = RuleChain.outerRule(files).around(init);
+ }
- private final LoggerContextRule init = new LoggerContextRule("JsonCompleteFileAppenderTest.xml");
- private final CleanFiles files = new CleanFiles(logFile);
+ @Parameters(name = "{0}")
+ public static Class<?>[] getParameters() {
+ return new Class<?>[] { ClassLoaderContextSelector.class };
+ }
+
+ private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
+ private final LoggerContextRule init;
+ private final CleanFiles files;
@Rule
- public RuleChain chain = RuleChain.outerRule(files).around(init);
+ public RuleChain chain;
@Test
public void testFlushAtEndOfBatch() throws Exception {
[29/38] logging-log4j2 git commit: Fix XmlCompleteFileAppenderTest
and some better names.
Posted by rp...@apache.org.
Fix XmlCompleteFileAppenderTest and some better names.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/29fe29c0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/29fe29c0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/29fe29c0
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 29fe29c01f511db578d5435bc1425efa89d3c9c4
Parents: ca2a888
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 12:12:54 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 12:12:54 2016 -0700
----------------------------------------------------------------------
.../core/appender/JsonCompleteFileAppenderTest.java | 6 +++---
.../core/appender/XmlCompleteFileAppenderTest.java | 14 ++++++--------
2 files changed, 9 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/29fe29c0/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index 4548521..b184421 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -63,10 +63,10 @@ public class JsonCompleteFileAppenderTest {
@Test
public void testFlushAtEndOfBatch() throws Exception {
- final Logger log = this.loggerContextRule.getLogger("com.foo.Bar");
+ final Logger logger = this.loggerContextRule.getLogger("com.foo.Bar");
final String logMsg = "Message flushed with immediate flush=true";
- log.info(logMsg);
- log.error(logMsg, new IllegalArgumentException("badarg"));
+ logger.info(logMsg);
+ logger.error(logMsg, new IllegalArgumentException("badarg"));
this.loggerContextRule.getContext().stop(); // stops async thread
String line1;
String line2;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/29fe29c0/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
index ab4d79f..9111825 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
@@ -16,6 +16,10 @@
*/
package org.apache.logging.log4j.core.appender;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
@@ -24,13 +28,11 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.CoreLoggerContexts;
import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
import org.apache.logging.log4j.core.selector.BasicContextSelector;
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
import org.apache.logging.log4j.junit.CleanFiles;
import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
@@ -38,8 +40,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
-import static org.junit.Assert.*;
-
/**
* Tests a "complete" XML file a.k.a. a well-formed XML file.
*/
@@ -66,11 +66,9 @@ public class XmlCompleteFileAppenderTest {
@Test
public void testFlushAtEndOfBatch() throws Exception {
- // System.out.println(f.getAbsolutePath());
- logFile.delete();
- final Logger log = LogManager.getLogger("com.foo.Bar");
+ final Logger logger = this.loggerContextRule.getLogger("com.foo.Bar");
final String logMsg = "Message flushed with immediate flush=false";
- log.info(logMsg);
+ logger.info(logMsg);
CoreLoggerContexts.stopLoggerContext(false, logFile); // stop async thread
String line1;
[18/38] logging-log4j2 git commit: Update maven-source-plugin from
3.0.0 to 3.0.1.
Posted by rp...@apache.org.
Update maven-source-plugin from 3.0.0 to 3.0.1.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/365a5419
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/365a5419
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/365a5419
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 365a54199e8414a0cb370bc9293a3969516b478d
Parents: f8a96c0
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 19:42:12 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 19:42:12 2016 -0700
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/365a5419/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8a825da..f9af41f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -844,7 +844,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
- <version>3.0.0</version>
+ <version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
[21/38] logging-log4j2 git commit: [LOG4J2-1482] Improper header in
CsvParameterLayout. Update code after feedback from Remko on the dev ML.
Posted by rp...@apache.org.
[LOG4J2-1482] Improper header in CsvParameterLayout. Update code after
feedback from Remko on the dev ML.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6478f94c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6478f94c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6478f94c
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 6478f94c0851540372748f0af8b2bf83b07d7cb1
Parents: 07cb3aa
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 17:15:02 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 17:15:02 2016 -0700
----------------------------------------------------------------------
.../log4j/core/layout/AbstractStringLayout.java | 17 ++++++++++-------
.../logging/log4j/core/layout/JsonLayout.java | 5 ++---
.../logging/log4j/core/layout/YamlLayout.java | 5 ++---
3 files changed, 14 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6478f94c/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
index 0634cc9..9e7deb5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
@@ -21,7 +21,6 @@ import org.apache.logging.log4j.core.StringLayout;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
-import org.apache.logging.log4j.core.impl.LogEventFactory;
import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.core.util.StringEncoder;
import org.apache.logging.log4j.util.PropertiesUtil;
@@ -192,7 +191,7 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
*/
@Override
public byte[] getFooter() {
- return serializeToBytes(footerSerializer, super.getFooter(), DefaultLogEventFactory.getInstance());
+ return serializeToBytes(footerSerializer, super.getFooter());
}
public Serializer getFooterSerializer() {
@@ -206,13 +205,17 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
*/
@Override
public byte[] getHeader() {
- return serializeToBytes(headerSerializer, super.getHeader(), DefaultLogEventFactory.getInstance());
+ return serializeToBytes(headerSerializer, super.getHeader());
}
public Serializer getHeaderSerializer() {
return headerSerializer;
}
+ protected DefaultLogEventFactory getLogEventFactory() {
+ return DefaultLogEventFactory.getInstance();
+ }
+
/**
* Returns a {@code Encoder<StringBuilder>} that this Layout implementation can use for encoding log events.
*
@@ -225,21 +228,21 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
return textEncoder;
}
- protected byte[] serializeToBytes(final Serializer serializer, final byte[] defaultValue, final LogEventFactory logEventFactory) {
- final String serializable = serializeToString(serializer, logEventFactory);
+ protected byte[] serializeToBytes(final Serializer serializer, final byte[] defaultValue) {
+ final String serializable = serializeToString(serializer);
if (serializer == null) {
return defaultValue;
}
return StringEncoder.toBytes(serializable, getCharset());
}
- protected String serializeToString(final Serializer serializer, final LogEventFactory logEventFactory) {
+ protected String serializeToString(final Serializer serializer) {
if (serializer == null) {
return null;
}
final LoggerConfig rootLogger = getConfiguration().getRootLogger();
// Using "" for the FQCN, does it matter?
- final LogEvent logEvent = logEventFactory.createEvent(rootLogger.getName(), null, Strings.EMPTY,
+ final LogEvent logEvent = getLogEventFactory().createEvent(rootLogger.getName(), null, Strings.EMPTY,
rootLogger.getLevel(), null, null, null);
return serializer.toSerializable(logEvent);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6478f94c/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
index 239a59f..e9d87ae 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
@@ -32,7 +32,6 @@ import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
/**
* Appends a series of JSON events as strings serialized as bytes.
@@ -829,7 +828,7 @@ public final class JsonLayout extends AbstractJacksonLayout {
return null;
}
final StringBuilder buf = new StringBuilder();
- final String str = serializeToString(getHeaderSerializer(), DefaultLogEventFactory.getInstance());
+ final String str = serializeToString(getHeaderSerializer());
if (str != null) {
buf.append(str);
}
@@ -849,7 +848,7 @@ public final class JsonLayout extends AbstractJacksonLayout {
}
final StringBuilder buf = new StringBuilder();
buf.append(this.eol);
- final String str = serializeToString(getFooterSerializer(), DefaultLogEventFactory.getInstance());
+ final String str = serializeToString(getFooterSerializer());
if (str != null) {
buf.append(str);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6478f94c/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
index 4b7a0c6..6f3e103 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
@@ -32,7 +32,6 @@ import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
import org.apache.logging.log4j.util.Strings;
/**
@@ -729,7 +728,7 @@ public final class YamlLayout extends AbstractJacksonLayout {
return null;
}
final StringBuilder buf = new StringBuilder();
- final String str = serializeToString(getHeaderSerializer(), DefaultLogEventFactory.getInstance());
+ final String str = serializeToString(getHeaderSerializer());
if (str != null) {
buf.append(str);
}
@@ -749,7 +748,7 @@ public final class YamlLayout extends AbstractJacksonLayout {
}
final StringBuilder buf = new StringBuilder();
buf.append(this.eol);
- final String str = serializeToString(getFooterSerializer(), DefaultLogEventFactory.getInstance());
+ final String str = serializeToString(getFooterSerializer());
if (str != null) {
buf.append(str);
}
[14/38] logging-log4j2 git commit: [LOG4J2-1494] Update Jackson from
2.8.0 to 2.8.1.
Posted by rp...@apache.org.
[LOG4J2-1494] Update Jackson from 2.8.0 to 2.8.1.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/67ce44fd
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/67ce44fd
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/67ce44fd
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 67ce44fd86e57598a95ad7fe16280b7bc8fb9c08
Parents: 2aeebfe
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 16:07:22 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 16:07:22 2016 -0700
----------------------------------------------------------------------
pom.xml | 2 +-
src/changes/changes.xml | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/67ce44fd/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a91c73f..822ca3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -192,7 +192,7 @@
<slf4jVersion>1.7.21</slf4jVersion>
<logbackVersion>1.1.7</logbackVersion>
<jackson1Version>1.9.13</jackson1Version>
- <jackson2Version>2.8.0</jackson2Version>
+ <jackson2Version>2.8.1</jackson2Version>
<springVersion>3.2.13.RELEASE</springVersion>
<flumeVersion>1.6.0</flumeVersion>
<disruptorVersion>3.3.4</disruptorVersion>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/67ce44fd/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 31f280d..2b4c777 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -66,6 +66,9 @@
<action issue="LOG4J2-1458" dev="ggregory" type="update" due-to="Gary Gregory">
Update Jackson from 2.7.5 to 2.8.0.
</action>
+ <action issue="LOG4J2-1494" dev="ggregory" type="update" due-to="Gary Gregory">
+ Update Jackson from 2.8.0 to 2.8.1.
+ </action>
</release>
<release version="2.6.2" date="2016-07-05" description="GA Release 2.6.2">
<action issue="LOG4J2-904" dev="rgoers" type="fix" due-to="Bernhard M�hr">
[15/38] logging-log4j2 git commit: [LOG4J2-1495] Update LMAX
Disruptor from 3.3.4 to 3.3.5.
Posted by rp...@apache.org.
[LOG4J2-1495] Update LMAX Disruptor from 3.3.4 to 3.3.5.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9318c406
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9318c406
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9318c406
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9318c4060b5a5043a2ec1adbbc133155e9f1943c
Parents: 67ce44f
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 17:41:51 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 17:41:51 2016 -0700
----------------------------------------------------------------------
pom.xml | 2 +-
src/changes/changes.xml | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9318c406/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 822ca3f..291b55f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,7 +195,7 @@
<jackson2Version>2.8.1</jackson2Version>
<springVersion>3.2.13.RELEASE</springVersion>
<flumeVersion>1.6.0</flumeVersion>
- <disruptorVersion>3.3.4</disruptorVersion>
+ <disruptorVersion>3.3.5</disruptorVersion>
<compiler.plugin.version>3.5.1</compiler.plugin.version>
<pmd.plugin.version>3.6</pmd.plugin.version>
<findbugs.plugin.version>3.0.3</findbugs.plugin.version>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9318c406/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 2b4c777..112da21 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -69,6 +69,9 @@
<action issue="LOG4J2-1494" dev="ggregory" type="update" due-to="Gary Gregory">
Update Jackson from 2.8.0 to 2.8.1.
</action>
+ <action issue="LOG4J2-1495" dev="ggregory" type="update" due-to="Gary Gregory">
+ Update LMAX Disruptor from 3.3.4 to 3.3.5.
+ </action>
</release>
<release version="2.6.2" date="2016-07-05" description="GA Release 2.6.2">
<action issue="LOG4J2-904" dev="rgoers" type="fix" due-to="Bernhard M�hr">
[17/38] logging-log4j2 git commit: [LOG4J2-1487] Update JMS test from
ActiveMQ 5.13.3 to 5.13.4.
Posted by rp...@apache.org.
[LOG4J2-1487] Update JMS test from ActiveMQ 5.13.3 to 5.13.4.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f8a96c05
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f8a96c05
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f8a96c05
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: f8a96c056c85a178188f41b8fa44c7d167e1fdc3
Parents: 6b3d461
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 19:38:20 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 19:38:20 2016 -0700
----------------------------------------------------------------------
pom.xml | 2 +-
src/changes/changes.xml | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f8a96c05/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6b0b2c2..8a825da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -221,7 +221,7 @@
<projectDir />
<commonsLoggingVersion>1.2</commonsLoggingVersion>
<osgi.api.version>4.3.1</osgi.api.version>
- <activemq.version>5.13.3</activemq.version>
+ <activemq.version>5.13.4</activemq.version>
<!-- Allow Clirr severity to be overriden by the command-line option -DminSeverity=level -->
<minSeverity>info</minSeverity>
</properties>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f8a96c05/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d52b38f..cceb355 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -75,6 +75,9 @@
<action issue="LOG4J2-1496" dev="ggregory" type="update" due-to="Gary Gregory">
Update Kafka client from 0.9.1.0 to 0.10.0.0.
</action>
+ <action issue="LOG4J2-1487" dev="ggregory" type="update" due-to="Gary Gregory">
+ Update JMS test from ActiveMQ 5.13.3 to 5.13.4.
+ </action>
</release>
<release version="2.6.2" date="2016-07-05" description="GA Release 2.6.2">
<action issue="LOG4J2-904" dev="rgoers" type="fix" due-to="Bernhard M�hr">
[34/38] logging-log4j2 git commit: Minor clean ups.
Posted by rp...@apache.org.
Minor clean ups.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6d416f9c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6d416f9c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6d416f9c
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 6d416f9cb47e50d25aeb0d98639d2ba6e6a2cc56
Parents: d1c02ee
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 21:01:32 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 21:01:32 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileManager.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6d416f9c/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 060f2db..3bb4f6c 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
@@ -202,6 +202,7 @@ public class FileManager extends OutputStreamManager {
* @param data The FactoryData
* @return The FileManager for the File.
*/
+ @SuppressWarnings("resource")
@Override
public FileManager createManager(final String name, final FactoryData data) {
final File file = new File(name);
@@ -211,12 +212,11 @@ public class FileManager extends OutputStreamManager {
}
final boolean writeHeader = !data.append || !file.exists();
- OutputStream os;
try {
- os = new FileOutputStream(name, data.append);
+ final FileOutputStream fos = new FileOutputStream(name, data.append);
final int actualSize = data.bufferedIO ? data.bufferSize : Constants.ENCODER_BYTE_BUFFER_SIZE;
final ByteBuffer buffer = ByteBuffer.wrap(new byte[actualSize]);
- return new FileManager(name, os, data.append, data.locking, data.advertiseURI, data.layout,
+ return new FileManager(name, fos, data.append, data.locking, data.advertiseURI, data.layout,
writeHeader, buffer);
} catch (final FileNotFoundException ex) {
LOGGER.error("FileManager (" + name + ") " + ex, ex);
[27/38] logging-log4j2 git commit: Consider a refactoring (commented
out).
Posted by rp...@apache.org.
Consider a refactoring (commented out).
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/924445db
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/924445db
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/924445db
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 924445dbbb1057441247afe7b0f2ab8146caaa5d
Parents: 1467acc
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:50:10 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:50:10 2016 -0700
----------------------------------------------------------------------
.../apache/logging/log4j/util/LoaderUtil.java | 28 +++++++++++++++-----
.../logging/log4j/junit/LoggerContextRule.java | 2 ++
2 files changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/924445db/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index b5f626d..6f08545 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -126,6 +126,26 @@ public final class LoaderUtil {
/**
* Loads and instantiates a Class using the default constructor.
*
+ * @param clazz The class.
+ * @return new instance of the class.
+ * @throws IllegalAccessException if the class can't be instantiated through a public constructor
+ * @throws InstantiationException if there was an exception whilst instantiating the class
+ * @throws InvocationTargetException if there was an exception whilst constructing the class
+ * @since 2.7
+ */
+ public static <T> T newInstanceOf(final Class<T> clazz)
+ throws InstantiationException, IllegalAccessException, InvocationTargetException {
+ try {
+ return clazz.getConstructor().newInstance();
+ } catch (final NoSuchMethodException ignored) {
+ // FIXME: looking at the code for Class.newInstance(), this seems to do the same thing as above
+ return clazz.newInstance();
+ }
+ }
+
+ /**
+ * Loads and instantiates a Class using the default constructor.
+ *
* @param className The class name.
* @return new instance of the class.
* @throws ClassNotFoundException if the class isn't available to the usual ClassLoaders
@@ -138,13 +158,7 @@ public final class LoaderUtil {
@SuppressWarnings("unchecked")
public static <T> T newInstanceOf(final String className) throws ClassNotFoundException, IllegalAccessException,
InstantiationException, NoSuchMethodException, InvocationTargetException {
- final Class<?> clazz = loadClass(className);
- try {
- return (T) clazz.getConstructor().newInstance();
- } catch (final NoSuchMethodException ignored) {
- // FIXME: looking at the code for Class.newInstance(), this seems to do the same thing as above
- return (T) clazz.newInstance();
- }
+ return newInstanceOf((Class<T>) loadClass(className));
}
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/924445db/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
index 3f33616..3468e3f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
@@ -87,6 +87,8 @@ public class LoggerContextRule implements TestRule {
if (contextSelectorClass != null) {
System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR, contextSelectorClass.getName());
}
+ // TODO Consider instead of the above:
+ // LogManager.setFactory(new Log4jContextFactory(LoaderUtil.newInstanceOf(contextSelectorClass)));
System.setProperty(SYS_PROP_KEY_CLASS_NAME, description.getClassName());
System.setProperty(SYS_PROP_KEY_DISPLAY_NAME, description.getDisplayName());
context = Configurator.initialize(description.getDisplayName(),
[07/38] logging-log4j2 git commit: Better constant name.
Posted by rp...@apache.org.
Better constant name.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/fd0320ee
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/fd0320ee
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/fd0320ee
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: fd0320ee62864757719775b407ec3019e714c1c0
Parents: 9e3ba65
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:07:29 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:07:29 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/flume/appender/FlumePersistentManager.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/fd0320ee/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 8a83ca7..4877ec5 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -74,7 +74,7 @@ public class FlumePersistentManager extends FlumeAvroManager {
private static final String DEFAULT_DATA_DIR = ".log4j/flumeData";
- private static final int SHUTDOWN_WAIT = 60;
+ private static final int SHUTDOWN_WAIT_SECONDS = 60;
private static final int MILLIS_PER_SECOND = 1000;
@@ -221,13 +221,13 @@ public class FlumePersistentManager extends FlumeAvroManager {
LOGGER.debug("Shutting down FlumePersistentManager");
worker.shutdown();
try {
- worker.join(SHUTDOWN_WAIT * MILLIS_PER_SECOND);
+ worker.join(SHUTDOWN_WAIT_SECONDS * MILLIS_PER_SECOND);
} catch (final InterruptedException ie) {
// Ignore the exception and shutdown.
}
threadPool.shutdown();
try {
- threadPool.awaitTermination(SHUTDOWN_WAIT, TimeUnit.SECONDS);
+ threadPool.awaitTermination(SHUTDOWN_WAIT_SECONDS, TimeUnit.SECONDS);
} catch (final InterruptedException e) {
logWarn("PersistentManager Thread pool failed to shut down", e);
}
[03/38] logging-log4j2 git commit: Minor Javadoc changes,
use the active voice.
Posted by rp...@apache.org.
Minor Javadoc changes, use the active voice.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b4039012
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b4039012
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b4039012
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: b4039012f9c4eae2bce7577ee53118889f2462c9
Parents: 2490cbe
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 09:11:40 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 09:11:40 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/appender/rolling/RollingFileManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b4039012/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 f92a9b7..4fdbf30 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
@@ -142,7 +142,7 @@ public class RollingFileManager extends FileManager {
}
/**
- * Determine if a rollover should occur.
+ * Determines if a rollover should occur.
* @param event The LogEvent.
*/
public synchronized void checkRollover(final LogEvent event) {
@@ -265,7 +265,7 @@ public class RollingFileManager extends FileManager {
}
/**
- * Perform an action.
+ * Executes an action.
*
* @return true if action was successful. A return value of false will cause
* the rollover to be aborted if possible.
[30/38] logging-log4j2 git commit: Longer timeout.
Posted by rp...@apache.org.
Longer timeout.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/0af1bc26
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/0af1bc26
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/0af1bc26
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 0af1bc26d6523aadd21406d7b7d38aec75316a9f
Parents: 29fe29c
Author: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Authored: Fri Aug 5 12:16:12 2016 -0700
Committer: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Committed: Fri Aug 5 12:16:12 2016 -0700
----------------------------------------------------------------------
.../core/appender/mom/jeromq/JeroMqAppenderTest.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0af1bc26/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
index fc85aab..52074ad 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppenderTest.java
@@ -31,17 +31,19 @@ import org.junit.Test;
public class JeroMqAppenderTest {
+ private static final int DEFAULT_TIMEOUT_MILLIS = 30000;
+
@ClassRule
public static LoggerContextRule ctx = new LoggerContextRule("JeroMqAppenderTest.xml");
- @Test(timeout = 10000)
+ @Test(timeout = DEFAULT_TIMEOUT_MILLIS)
public void testAppenderLifeCycle() throws Exception {
// do nothing to make sure the appender starts and stops without
// locking up resources.
Assert.assertNotNull(JeroMqManager.getContext());
}
- @Test(timeout = 10000)
+ @Test(timeout = DEFAULT_TIMEOUT_MILLIS)
public void testClientServer() throws Exception {
final JeroMqAppender appender = ctx.getRequiredAppender("JeroMQAppender", JeroMqAppender.class);
final int expectedReceiveCount = 3;
@@ -67,7 +69,7 @@ public class JeroMqAppenderTest {
}
}
- @Test(timeout = 10000)
+ @Test(timeout = DEFAULT_TIMEOUT_MILLIS)
public void testMultiThreadedServer() throws Exception {
final int nThreads = 10;
final JeroMqAppender appender = ctx.getRequiredAppender("JeroMQAppender", JeroMqAppender.class);
@@ -114,7 +116,7 @@ public class JeroMqAppenderTest {
}
}
- @Test(timeout = 10000)
+ @Test(timeout = DEFAULT_TIMEOUT_MILLIS)
public void testServerOnly() throws Exception {
final Logger logger = ctx.getLogger(getClass().getName());
final JeroMqAppender appender = ctx.getRequiredAppender("JeroMQAppender", JeroMqAppender.class);
[02/38] logging-log4j2 git commit: Remove blank line.
Posted by rp...@apache.org.
Remove blank line.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2490cbe5
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2490cbe5
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2490cbe5
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 2490cbe59c47025cdfee445bc22af42c69544931
Parents: 7ca4dfe
Author: Gary Gregory <gg...@apache.org>
Authored: Tue Aug 2 21:20:13 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Tue Aug 2 21:20:13 2016 -0700
----------------------------------------------------------------------
.../src/test/java/org/apache/logging/slf4j/Log4j1222Test.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2490cbe5/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j1222Test.java
----------------------------------------------------------------------
diff --git a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j1222Test.java b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j1222Test.java
index 1e17161..59f69e0 100644
--- a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j1222Test.java
+++ b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j1222Test.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.slf4j;
-
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
[37/38] logging-log4j2 git commit: [LOG4J2-1501] FileAppender should
be able to create files lazily. Assert default behavior which always creates
the file.
Posted by rp...@apache.org.
[LOG4J2-1501] FileAppender should be able to create files lazily. Assert
default behavior which always creates the file.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/30582789
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/30582789
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/30582789
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 3058278956c4b9474ef0da4e7aef46e484f9cc29
Parents: dca3e56
Author: Gary Gregory <gg...@apache.org>
Authored: Sat Aug 6 16:04:28 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sat Aug 6 16:04:28 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/appender/FileAppenderTest.java | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/30582789/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 3334e7d..9934d10 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -23,6 +23,8 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -38,6 +40,7 @@ import org.apache.logging.log4j.junit.CleanFiles;
import org.apache.logging.log4j.message.SimpleMessage;
import org.apache.logging.log4j.util.Strings;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -171,6 +174,7 @@ public class FileAppenderTest {
"false", "false", null, layout, null, "false", null, null);
app.start();
assertTrue("Appender did not start", app.isStarted());
+ Assert.assertTrue(Files.exists(Paths.get(FILENAME)));
for (int i = 0; i < count; ++i) {
final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger")
.setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO)
[20/38] logging-log4j2 git commit: Sort methods.
Posted by rp...@apache.org.
Sort methods.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/07cb3aab
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/07cb3aab
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/07cb3aab
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 07cb3aab3ceb822058dd62f035077977a9e5b077
Parents: f4f8eaf
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 17:12:52 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 17:12:52 2016 -0700
----------------------------------------------------------------------
.../log4j/core/layout/AbstractStringLayout.java | 50 ++++++++++----------
1 file changed, 25 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/07cb3aab/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
index 5ac98e7..0634cc9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
@@ -65,12 +65,6 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
private static final ThreadLocal<StringBuilder> threadLocal = new ThreadLocal<>();
- private Encoder<StringBuilder> textEncoder;
-
- private static int size(final String property, final int defaultValue) {
- return PropertiesUtil.getProperties().getIntegerProperty(property, defaultValue);
- }
-
/**
* Returns a {@code StringBuilder} that this Layout implementation can use to write the formatted log event to.
*
@@ -87,13 +81,6 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
return result;
}
- protected static void trimToMaxSize(final StringBuilder stringBuilder) {
- if (stringBuilder.length() > MAX_STRING_BUILDER_SIZE) {
- stringBuilder.setLength(MAX_STRING_BUILDER_SIZE);
- stringBuilder.trimToSize();
- }
- }
-
// LOG4J2-1151: If the built-in JDK 8 encoders are available we should use them.
private static boolean isPreJava8() {
final String version = System.getProperty("java.version");
@@ -105,6 +92,19 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
return true;
}
}
+
+ private static int size(final String property, final int defaultValue) {
+ return PropertiesUtil.getProperties().getIntegerProperty(property, defaultValue);
+ }
+
+ protected static void trimToMaxSize(final StringBuilder stringBuilder) {
+ if (stringBuilder.length() > MAX_STRING_BUILDER_SIZE) {
+ stringBuilder.setLength(MAX_STRING_BUILDER_SIZE);
+ stringBuilder.trimToSize();
+ }
+ }
+
+ private Encoder<StringBuilder> textEncoder;
/**
* The charset for the formatted message.
*/
@@ -161,18 +161,6 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
textEncoder = Constants.ENABLE_DIRECT_ENCODERS ? new StringBuilderEncoder(charset) : null;
}
- /**
- * Returns a {@code Encoder<StringBuilder>} that this Layout implementation can use for encoding log events.
- *
- * @return a {@code Encoder<StringBuilder>}
- */
- protected Encoder<StringBuilder> getStringBuilderEncoder() {
- if (textEncoder == null) {
- textEncoder = new StringBuilderEncoder(getCharset());
- }
- return textEncoder;
- }
-
protected byte[] getBytes(final String s) {
if (useCustomEncoding) { // rely on branch prediction to eliminate this check if false
return StringEncoder.encodeSingleByteChars(s);
@@ -225,6 +213,18 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
return headerSerializer;
}
+ /**
+ * Returns a {@code Encoder<StringBuilder>} that this Layout implementation can use for encoding log events.
+ *
+ * @return a {@code Encoder<StringBuilder>}
+ */
+ protected Encoder<StringBuilder> getStringBuilderEncoder() {
+ if (textEncoder == null) {
+ textEncoder = new StringBuilderEncoder(getCharset());
+ }
+ return textEncoder;
+ }
+
protected byte[] serializeToBytes(final Serializer serializer, final byte[] defaultValue, final LogEventFactory logEventFactory) {
final String serializable = serializeToString(serializer, logEventFactory);
if (serializer == null) {
[38/38] logging-log4j2 git commit: Merge branches
'LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure' and
'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2 into
LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-data
Posted by rp...@apache.org.
Merge branches 'LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure' and 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2 into LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/39501130
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/39501130
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/39501130
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 39501130fd1f7b588b262494b759e2a4a59a2a32
Parents: c846a75 3058278
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 7 22:08:16 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Aug 7 22:08:16 2016 +0900
----------------------------------------------------------------------
.../apache/logging/log4j/util/Constants.java | 3 +-
.../apache/logging/log4j/util/LoaderUtil.java | 28 +-
.../org/apache/logging/log4j/util/Unbox.java | 1 +
log4j-core/pom.xml | 2 +-
.../log4j/core/appender/FileManager.java | 31 +-
.../core/appender/MemoryMappedFileAppender.java | 2 +-
.../core/appender/MemoryMappedFileManager.java | 6 +-
.../core/appender/RandomAccessFileAppender.java | 2 +-
.../core/appender/RandomAccessFileManager.java | 2 +-
.../RollingRandomAccessFileAppender.java | 2 +-
.../appender/db/AbstractDatabaseManager.java | 4 +-
.../appender/db/jdbc/JdbcDatabaseManager.java | 4 +-
.../appender/db/jpa/JpaDatabaseManager.java | 2 +-
.../appender/rolling/RollingFileManager.java | 4 +-
.../rolling/RollingRandomAccessFileManager.java | 4 +-
.../core/async/AsyncQueueFullPolicyFactory.java | 4 +-
.../log4j/core/async/RingBufferLogEvent.java | 2 +-
.../config/composite/DefaultMergeStrategy.java | 6 +-
.../log4j/core/impl/DefaultLogEventFactory.java | 7 +-
.../log4j/core/layout/AbstractStringLayout.java | 57 +-
.../logging/log4j/core/net/SmtpManager.java | 2 +-
.../core/selector/CoreContextSelectors.java | 25 +
.../logging/log4j/core/util/Constants.java | 4 +-
.../log4j/core/appender/FileAppenderTest.java | 4 +
.../appender/JsonCompleteFileAppenderTest.java | 37 +-
.../appender/XmlCompleteFileAppenderTest.java | 68 +-
.../appender/mom/jeromq/JeroMqAppenderTest.java | 10 +-
.../core/config/CompositeConfigurationTest.java | 19 +
.../log4j/core/layout/Log4j2_1482_CoreTest.java | 20 +
.../log4j/core/layout/Log4j2_1482_Test.java | 89 +
.../logging/log4j/junit/LoggerContextRule.java | 2 +
.../test/resources/log4j-comp-root-loggers.xml | 46 +
log4j-core/src/test/resources/log4j2-1482.xml | 27 +
.../flume/appender/FlumePersistentManager.java | 1756 +++++++++---------
log4j-slf4j-impl/pom.xml | 5 +
.../org/apache/logging/slf4j/Log4j1222Test.java | 1 -
.../logging/slf4j/Log4j2_1482_Slf4jTest.java | 41 +
.../src/test/resources/log4j2-1482.xml | 27 +
pom.xml | 10 +-
src/changes/changes.xml | 18 +
40 files changed, 1383 insertions(+), 1001 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/39501130/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
----------------------------------------------------------------------
[28/38] logging-log4j2 git commit: Javadoc: Close tag and make
Javadoc 8 happy.
Posted by rp...@apache.org.
Javadoc: Close tag and make Javadoc 8 happy.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ca2a888e
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ca2a888e
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ca2a888e
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: ca2a888e736e4342a93251b335d2e5c172bc4eb0
Parents: 924445d
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 09:29:41 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 09:29:41 2016 -0700
----------------------------------------------------------------------
.../src/main/java/org/apache/logging/log4j/util/Constants.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ca2a888e/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
index 6e84d10..1351129 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
@@ -35,6 +35,7 @@ public final class Constants {
* <p>
* {@code True} for non-{@link #IS_WEB_APP web apps}, disable by setting system property
* "log4j2.enable.threadlocals" to "false".
+ * </p>
*/
public static final boolean ENABLE_THREADLOCALS = !IS_WEB_APP && PropertiesUtil.getProperties().getBooleanProperty(
"log4j2.enable.threadlocals", true);
[09/38] logging-log4j2 git commit: Remove no longer needed constant.
Posted by rp...@apache.org.
Remove no longer needed constant.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4c077d37
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4c077d37
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4c077d37
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 4c077d37aa854a4e1368fc390d27c760f3b27eff
Parents: 451a02d
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:09:22 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:09:22 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/flume/appender/FlumePersistentManager.java | 2 --
1 file changed, 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4c077d37/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 668210f..daf6fdd 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -76,8 +76,6 @@ public class FlumePersistentManager extends FlumeAvroManager {
private static final int SHUTDOWN_WAIT_SECONDS = 60;
- private static final int MILLIS_PER_SECOND = 1000;
-
private static final int LOCK_TIMEOUT_SLEEP_MILLIS = 500;
private static BDBManagerFactory factory = new BDBManagerFactory();
[06/38] logging-log4j2 git commit: Internal error messages start with
a capital letter.
Posted by rp...@apache.org.
Internal error messages start with a capital letter.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9e3ba659
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9e3ba659
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9e3ba659
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9e3ba65942a756ea50474242e17310553aa002bd
Parents: 9d757a1
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:04:46 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:04:46 2016 -0700
----------------------------------------------------------------------
.../appender/db/AbstractDatabaseManager.java | 2 +-
.../appender/db/jdbc/JdbcDatabaseManager.java | 4 +-
.../appender/db/jpa/JpaDatabaseManager.java | 2 +-
.../flume/appender/FlumePersistentManager.java | 1758 +++++++++---------
4 files changed, 883 insertions(+), 883 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9e3ba659/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
index 8d58ab6..82c7b18 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
@@ -88,7 +88,7 @@ public abstract class AbstractDatabaseManager extends AbstractManager implements
try {
this.shutdownInternal();
} catch (final Exception e) {
- logWarn("caught exception while performing database shutdown operations", e);
+ logWarn("Caught exception while performing database shutdown operations", e);
} finally {
this.running = false;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9e3ba659/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
index a1d6204..76e1901 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
@@ -144,7 +144,7 @@ public final class JdbcDatabaseManager extends AbstractDatabaseManager {
try {
Closer.close(this.statement);
} catch (final Exception e) {
- logWarn("failed to close SQL statement logging event or flushing buffer", e);
+ logWarn("Failed to close SQL statement logging event or flushing buffer", e);
} finally {
this.statement = null;
}
@@ -152,7 +152,7 @@ public final class JdbcDatabaseManager extends AbstractDatabaseManager {
try {
Closer.close(this.connection);
} catch (final Exception e) {
- logWarn("failed to close database connection logging event or flushing buffer", e);
+ logWarn("Failed to close database connection logging event or flushing buffer", e);
} finally {
this.connection = null;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9e3ba659/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java
index 480c8b7..17c5642 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.java
@@ -125,7 +125,7 @@ public final class JpaDatabaseManager extends AbstractDatabaseManager {
this.entityManager.close();
}
} catch (final Exception e) {
- logWarn("failed to close entity manager while logging event or flushing buffer", e);
+ logWarn("Failed to close entity manager while logging event or flushing buffer", e);
} finally {
this.entityManager = null;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9e3ba659/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 4134671..8a83ca7 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -1,879 +1,879 @@
-/*
- * 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.flume.appender;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.crypto.Cipher;
-import javax.crypto.SecretKey;
-
-import org.apache.flume.Event;
-import org.apache.flume.event.SimpleEvent;
-import org.apache.logging.log4j.LoggingException;
-import org.apache.logging.log4j.core.appender.ManagerFactory;
-import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
-import org.apache.logging.log4j.core.config.plugins.util.PluginType;
-import org.apache.logging.log4j.core.util.FileUtils;
-import org.apache.logging.log4j.core.util.Log4jThread;
-import org.apache.logging.log4j.core.util.SecretKeyProvider;
-import org.apache.logging.log4j.util.Strings;
-
-import com.sleepycat.je.Cursor;
-import com.sleepycat.je.CursorConfig;
-import com.sleepycat.je.Database;
-import com.sleepycat.je.DatabaseConfig;
-import com.sleepycat.je.DatabaseEntry;
-import com.sleepycat.je.Environment;
-import com.sleepycat.je.EnvironmentConfig;
-import com.sleepycat.je.LockConflictException;
-import com.sleepycat.je.LockMode;
-import com.sleepycat.je.OperationStatus;
-import com.sleepycat.je.StatsConfig;
-import com.sleepycat.je.Transaction;
-
-/**
- * Manager that persists data to Berkeley DB before passing it on to Flume.
- */
-public class FlumePersistentManager extends FlumeAvroManager {
-
- /** Attribute name for the key provider. */
- public static final String KEY_PROVIDER = "keyProvider";
-
- private static final Charset UTF8 = StandardCharsets.UTF_8;
-
- private static final String DEFAULT_DATA_DIR = ".log4j/flumeData";
-
- private static final int SHUTDOWN_WAIT = 60;
-
- private static final int MILLIS_PER_SECOND = 1000;
-
- private static final int LOCK_TIMEOUT_SLEEP_MILLIS = 500;
-
- private static BDBManagerFactory factory = new BDBManagerFactory();
-
- private final Database database;
-
- private final Environment environment;
-
- private final WriterThread worker;
-
- private final Gate gate = new Gate();
-
- private final SecretKey secretKey;
-
- private final int lockTimeoutRetryCount;
-
- private final ExecutorService threadPool;
-
- private final AtomicLong dbCount = new AtomicLong();
-
- /**
- * Constructor
- * @param name The unique name of this manager.
- * @param shortName Original name for the Manager.
- * @param agents An array of Agents.
- * @param batchSize The number of events to include in a batch.
- * @param retries The number of times to retry connecting before giving up.
- * @param connectionTimeout The amount of time to wait for a connection to be established.
- * @param requestTimeout The amount of time to wair for a response to a request.
- * @param delay The amount of time to wait between retries.
- * @param database The database to write to.
- * @param environment The database environment.
- * @param secretKey The SecretKey to use for encryption.
- * @param lockTimeoutRetryCount The number of times to retry a lock timeout.
- */
- protected FlumePersistentManager(final String name, final String shortName, final Agent[] agents,
- final int batchSize, final int retries, final int connectionTimeout,
- final int requestTimeout, final int delay, final Database database,
- final Environment environment, final SecretKey secretKey,
- final int lockTimeoutRetryCount) {
- super(name, shortName, agents, batchSize, delay, retries, connectionTimeout, requestTimeout);
- this.database = database;
- this.environment = environment;
- dbCount.set(database.count());
- this.worker = new WriterThread(database, environment, this, gate, batchSize, secretKey, dbCount,
- lockTimeoutRetryCount);
- this.worker.start();
- this.secretKey = secretKey;
- this.threadPool = Executors.newCachedThreadPool(new DaemonThreadFactory());
- this.lockTimeoutRetryCount = lockTimeoutRetryCount;
- }
-
-
- /**
- * Returns a FlumeAvroManager.
- * @param name The name of the manager.
- * @param agents The agents to use.
- * @param properties Properties to pass to the Manager.
- * @param batchSize The number of events to include in a batch.
- * @param retries The number of times to retry connecting before giving up.
- * @param connectionTimeout The amount of time to wait to establish a connection.
- * @param requestTimeout The amount of time to wait for a response to a request.
- * @param delayMillis Amount of time to delay before delivering a batch.
- * @param lockTimeoutRetryCount The number of times to retry after a lock timeout.
- * @param dataDir The location of the Berkeley database.
- * @return A FlumeAvroManager.
- */
- public static FlumePersistentManager getManager(final String name, final Agent[] agents,
- final Property[] properties, int batchSize, final int retries,
- final int connectionTimeout, final int requestTimeout,
- final int delayMillis, final int lockTimeoutRetryCount,
- final String dataDir) {
- if (agents == null || agents.length == 0) {
- throw new IllegalArgumentException("At least one agent is required");
- }
-
- if (batchSize <= 0) {
- batchSize = 1;
- }
- final String dataDirectory = Strings.isEmpty(dataDir) ? DEFAULT_DATA_DIR : dataDir;
-
- final StringBuilder sb = new StringBuilder("FlumePersistent[");
- boolean first = true;
- for (final Agent agent : agents) {
- if (!first) {
- sb.append(',');
- }
- sb.append(agent.getHost()).append(':').append(agent.getPort());
- first = false;
- }
- sb.append(']');
- sb.append(' ').append(dataDirectory);
- return getManager(sb.toString(), factory, new FactoryData(name, agents, batchSize, retries,
- connectionTimeout, requestTimeout, delayMillis, lockTimeoutRetryCount, dataDir, properties));
- }
-
- @Override
- public void send(final Event event) {
- if (worker.isShutdown()) {
- throw new LoggingException("Unable to record event");
- }
-
- final Map<String, String> headers = event.getHeaders();
- final byte[] keyData = headers.get(FlumeEvent.GUID).getBytes(UTF8);
- try {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final DataOutputStream daos = new DataOutputStream(baos);
- daos.writeInt(event.getBody().length);
- daos.write(event.getBody(), 0, event.getBody().length);
- daos.writeInt(event.getHeaders().size());
- for (final Map.Entry<String, String> entry : headers.entrySet()) {
- daos.writeUTF(entry.getKey());
- daos.writeUTF(entry.getValue());
- }
- byte[] eventData = baos.toByteArray();
- if (secretKey != null) {
- final Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.ENCRYPT_MODE, secretKey);
- eventData = cipher.doFinal(eventData);
- }
- final Future<Integer> future = threadPool.submit(new BDBWriter(keyData, eventData, environment, database,
- gate, dbCount, getBatchSize(), lockTimeoutRetryCount));
- boolean interrupted = false;
- int ieCount = 0;
- do {
- try {
- future.get();
- } catch (final InterruptedException ie) {
- interrupted = true;
- ++ieCount;
- }
- } while (interrupted && ieCount <= 1);
-
- } catch (final Exception ex) {
- throw new LoggingException("Exception occurred writing log event", ex);
- }
- }
-
- @Override
- protected void releaseSub() {
- LOGGER.debug("Shutting down FlumePersistentManager");
- worker.shutdown();
- try {
- worker.join(SHUTDOWN_WAIT * MILLIS_PER_SECOND);
- } catch (final InterruptedException ie) {
- // Ignore the exception and shutdown.
- }
- threadPool.shutdown();
- try {
- threadPool.awaitTermination(SHUTDOWN_WAIT, TimeUnit.SECONDS);
- } catch (final InterruptedException e) {
- logWarn("PersistentManager Thread pool failed to shut down", e);
- }
- try {
- worker.join();
- } catch (final InterruptedException ex) {
- logDebug("interrupted while waiting for worker to complete", ex);
- }
- try {
- LOGGER.debug("FlumePersistenceManager dataset status: {}", database.getStats(new StatsConfig()));
- database.close();
- } catch (final Exception ex) {
- logWarn("failed to close database", ex);
- }
- try {
- environment.cleanLog();
- environment.close();
- } catch (final Exception ex) {
- logWarn("failed to close environment", ex);
- }
- super.releaseSub();
- }
-
- private void doSend(final SimpleEvent event) {
- LOGGER.debug("Sending event to Flume");
- super.send(event);
- }
-
- /**
- * Thread for writing to Berkeley DB to avoid having interrupts close the database.
- */
- private static class BDBWriter implements Callable<Integer> {
- private final byte[] eventData;
- private final byte[] keyData;
- private final Environment environment;
- private final Database database;
- private final Gate gate;
- private final AtomicLong dbCount;
- private final long batchSize;
- private final int lockTimeoutRetryCount;
-
- public BDBWriter(final byte[] keyData, final byte[] eventData, final Environment environment,
- final Database database, final Gate gate, final AtomicLong dbCount, final long batchSize,
- final int lockTimeoutRetryCount) {
- this.keyData = keyData;
- this.eventData = eventData;
- this.environment = environment;
- this.database = database;
- this.gate = gate;
- this.dbCount = dbCount;
- this.batchSize = batchSize;
- this.lockTimeoutRetryCount = lockTimeoutRetryCount;
- }
-
- @Override
- public Integer call() throws Exception {
- final DatabaseEntry key = new DatabaseEntry(keyData);
- final DatabaseEntry data = new DatabaseEntry(eventData);
- Exception exception = null;
- for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
- Transaction txn = null;
- try {
- txn = environment.beginTransaction(null, null);
- try {
- database.put(txn, key, data);
- txn.commit();
- txn = null;
- if (dbCount.incrementAndGet() >= batchSize) {
- gate.open();
- }
- exception = null;
- break;
- } catch (final LockConflictException lce) {
- exception = lce;
- // Fall through and retry.
- } catch (final Exception ex) {
- if (txn != null) {
- txn.abort();
- }
- throw ex;
- } finally {
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
- } catch (final LockConflictException lce) {
- exception = lce;
- if (txn != null) {
- try {
- txn.abort();
- txn = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignoring exception while aborting transaction during lock conflict.");
- }
- }
-
- }
- try {
- Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
- } catch (final InterruptedException ie) {
- // Ignore the error
- }
- }
- if (exception != null) {
- throw exception;
- }
- return eventData.length;
- }
- }
-
- /**
- * Factory data.
- */
- private static class FactoryData {
- private final String name;
- private final Agent[] agents;
- private final int batchSize;
- private final String dataDir;
- private final int retries;
- private final int connectionTimeout;
- private final int requestTimeout;
- private final int delayMillis;
- private final int lockTimeoutRetryCount;
- private final Property[] properties;
-
- /**
- * Constructor.
- * @param name The name of the Appender.
- * @param agents The agents.
- * @param batchSize The number of events to include in a batch.
- * @param dataDir The directory for data.
- */
- public FactoryData(final String name, final Agent[] agents, final int batchSize, final int retries,
- final int connectionTimeout, final int requestTimeout, final int delayMillis,
- final int lockTimeoutRetryCount, final String dataDir, final Property[] properties) {
- this.name = name;
- this.agents = agents;
- this.batchSize = batchSize;
- this.dataDir = dataDir;
- this.retries = retries;
- this.connectionTimeout = connectionTimeout;
- this.requestTimeout = requestTimeout;
- this.delayMillis = delayMillis;
- this.lockTimeoutRetryCount = lockTimeoutRetryCount;
- this.properties = properties;
- }
- }
-
- /**
- * Avro Manager Factory.
- */
- private static class BDBManagerFactory implements ManagerFactory<FlumePersistentManager, FactoryData> {
-
- /**
- * Create the FlumeKratiManager.
- * @param name The name of the entity to manage.
- * @param data The data required to create the entity.
- * @return The FlumeKratiManager.
- */
- @Override
- public FlumePersistentManager createManager(final String name, final FactoryData data) {
- SecretKey secretKey = null;
- Database database = null;
- Environment environment = null;
-
- final Map<String, String> properties = new HashMap<>();
- if (data.properties != null) {
- for (final Property property : data.properties) {
- properties.put(property.getName(), property.getValue());
- }
- }
-
- try {
- final File dir = new File(data.dataDir);
- FileUtils.mkdir(dir, true);
- final EnvironmentConfig dbEnvConfig = new EnvironmentConfig();
- dbEnvConfig.setTransactional(true);
- dbEnvConfig.setAllowCreate(true);
- dbEnvConfig.setLockTimeout(5, TimeUnit.SECONDS);
- environment = new Environment(dir, dbEnvConfig);
- final DatabaseConfig dbConfig = new DatabaseConfig();
- dbConfig.setTransactional(true);
- dbConfig.setAllowCreate(true);
- database = environment.openDatabase(null, name, dbConfig);
- } catch (final Exception ex) {
- LOGGER.error("Could not create FlumePersistentManager", ex);
- // For consistency, close database as well as environment even though it should never happen since the
- // database is that last thing in the block above, but this does guard against a future line being
- // inserted at the end that would bomb (like some debug logging).
- if (database != null) {
- database.close();
- database = null;
- }
- if (environment != null) {
- environment.close();
- environment = null;
- }
- return null;
- }
-
- try {
- String key = null;
- for (final Map.Entry<String, String> entry : properties.entrySet()) {
- if (entry.getKey().equalsIgnoreCase(KEY_PROVIDER)) {
- key = entry.getValue();
- break;
- }
- }
- if (key != null) {
- final PluginManager manager = new PluginManager("KeyProvider");
- manager.collectPlugins();
- final Map<String, PluginType<?>> plugins = manager.getPlugins();
- if (plugins != null) {
- boolean found = false;
- for (final Map.Entry<String, PluginType<?>> entry : plugins.entrySet()) {
- if (entry.getKey().equalsIgnoreCase(key)) {
- found = true;
- final Class<?> cl = entry.getValue().getPluginClass();
- try {
- final SecretKeyProvider provider = (SecretKeyProvider) cl.newInstance();
- secretKey = provider.getSecretKey();
- LOGGER.debug("Persisting events using SecretKeyProvider {}", cl.getName());
- } catch (final Exception ex) {
- LOGGER.error("Unable to create SecretKeyProvider {}, encryption will be disabled",
- cl.getName());
- }
- break;
- }
- }
- if (!found) {
- LOGGER.error("Unable to locate SecretKey provider {}, encryption will be disabled", key);
- }
- } else {
- LOGGER.error("Unable to locate SecretKey provider {}, encryption will be disabled", key);
- }
- }
- } catch (final Exception ex) {
- LOGGER.warn("Error setting up encryption - encryption will be disabled", ex);
- }
- return new FlumePersistentManager(name, data.name, data.agents, data.batchSize, data.retries,
- data.connectionTimeout, data.requestTimeout, data.delayMillis, database, environment, secretKey,
- data.lockTimeoutRetryCount);
- }
- }
-
- /**
- * Thread that sends data to Flume and pulls it from Berkeley DB.
- */
- private static class WriterThread extends Thread {
- private volatile boolean shutdown = false;
- private final Database database;
- private final Environment environment;
- private final FlumePersistentManager manager;
- private final Gate gate;
- private final SecretKey secretKey;
- private final int batchSize;
- private final AtomicLong dbCounter;
- private final int lockTimeoutRetryCount;
-
- public WriterThread(final Database database, final Environment environment,
- final FlumePersistentManager manager, final Gate gate, final int batchsize,
- final SecretKey secretKey, final AtomicLong dbCount, final int lockTimeoutRetryCount) {
- this.database = database;
- this.environment = environment;
- this.manager = manager;
- this.gate = gate;
- this.batchSize = batchsize;
- this.secretKey = secretKey;
- this.setDaemon(true);
- this.dbCounter = dbCount;
- this.lockTimeoutRetryCount = lockTimeoutRetryCount;
- }
-
- public void shutdown() {
- LOGGER.debug("Writer thread shutting down");
- this.shutdown = true;
- gate.open();
- }
-
- public boolean isShutdown() {
- return shutdown;
- }
-
- @Override
- public void run() {
- LOGGER.trace("WriterThread started - batch size = " + batchSize + ", delayMillis = " + manager.getDelayMillis());
- long nextBatchMillis = System.currentTimeMillis() + manager.getDelayMillis();
- while (!shutdown) {
- final long nowMillis = System.currentTimeMillis();
- final long dbCount = database.count();
- dbCounter.set(dbCount);
- if (dbCount >= batchSize || dbCount > 0 && nextBatchMillis <= nowMillis) {
- nextBatchMillis = nowMillis + manager.getDelayMillis();
- try {
- boolean errors = false;
- final DatabaseEntry key = new DatabaseEntry();
- final DatabaseEntry data = new DatabaseEntry();
-
- gate.close();
- OperationStatus status;
- if (batchSize > 1) {
- try {
- errors = sendBatch(key, data);
- } catch (final Exception ex) {
- break;
- }
- } else {
- Exception exception = null;
- for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
- exception = null;
- Transaction txn = null;
- Cursor cursor = null;
- try {
- txn = environment.beginTransaction(null, null);
- cursor = database.openCursor(txn, null);
- try {
- status = cursor.getFirst(key, data, LockMode.RMW);
- while (status == OperationStatus.SUCCESS) {
- final SimpleEvent event = createEvent(data);
- if (event != null) {
- try {
- manager.doSend(event);
- } catch (final Exception ioe) {
- errors = true;
- LOGGER.error("Error sending event", ioe);
- break;
- }
- try {
- cursor.delete();
- } catch (final Exception ex) {
- LOGGER.error("Unable to delete event", ex);
- }
- }
- status = cursor.getNext(key, data, LockMode.RMW);
- }
- if (cursor != null) {
- cursor.close();
- cursor = null;
- }
- txn.commit();
- txn = null;
- dbCounter.decrementAndGet();
- exception = null;
- break;
- } catch (final LockConflictException lce) {
- exception = lce;
- // Fall through and retry.
- } catch (final Exception ex) {
- LOGGER.error("Error reading or writing to database", ex);
- shutdown = true;
- break;
- } finally {
- if (cursor != null) {
- cursor.close();
- cursor = null;
- }
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
- } catch (final LockConflictException lce) {
- exception = lce;
- if (cursor != null) {
- try {
- cursor.close();
- cursor = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception closing cursor during lock conflict.");
- }
- }
- if (txn != null) {
- try {
- txn.abort();
- txn = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception aborting tx during lock conflict.");
- }
- }
- }
- try {
- Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
- } catch (final InterruptedException ie) {
- // Ignore the error
- }
- }
- if (exception != null) {
- LOGGER.error("Unable to read or update data base", exception);
- }
- }
- if (errors) {
- Thread.sleep(manager.getDelayMillis());
- continue;
- }
- } catch (final Exception ex) {
- LOGGER.warn("WriterThread encountered an exception. Continuing.", ex);
- }
- } else {
- if (nextBatchMillis <= nowMillis) {
- nextBatchMillis = nowMillis + manager.getDelayMillis();
- }
- try {
- final long interval = nextBatchMillis - nowMillis;
- gate.waitForOpen(interval);
- } catch (final InterruptedException ie) {
- LOGGER.warn("WriterThread interrupted, continuing");
- } catch (final Exception ex) {
- LOGGER.error("WriterThread encountered an exception waiting for work", ex);
- break;
- }
- }
- }
-
- if (batchSize > 1 && database.count() > 0) {
- final DatabaseEntry key = new DatabaseEntry();
- final DatabaseEntry data = new DatabaseEntry();
- try {
- sendBatch(key, data);
- } catch (final Exception ex) {
- LOGGER.warn("Unable to write final batch");
- }
- }
- LOGGER.trace("WriterThread exiting");
- }
-
- private boolean sendBatch(DatabaseEntry key, final DatabaseEntry data) throws Exception {
- boolean errors = false;
- OperationStatus status;
- Cursor cursor = null;
- try {
- final BatchEvent batch = new BatchEvent();
- for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
- try {
- cursor = database.openCursor(null, CursorConfig.DEFAULT);
- status = cursor.getFirst(key, data, null);
-
- for (int i = 0; status == OperationStatus.SUCCESS && i < batchSize; ++i) {
- final SimpleEvent event = createEvent(data);
- if (event != null) {
- batch.addEvent(event);
- }
- status = cursor.getNext(key, data, null);
- }
- break;
- } catch (final LockConflictException lce) {
- if (cursor != null) {
- try {
- cursor.close();
- cursor = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception closing cursor during lock conflict.");
- }
- }
- }
- }
-
- try {
- manager.send(batch);
- } catch (final Exception ioe) {
- LOGGER.error("Error sending events", ioe);
- errors = true;
- }
- if (!errors) {
- if (cursor != null) {
- cursor.close();
- cursor = null;
- }
- Transaction txn = null;
- Exception exception = null;
- for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
- try {
- txn = environment.beginTransaction(null, null);
- try {
- for (final Event event : batch.getEvents()) {
- try {
- final Map<String, String> headers = event.getHeaders();
- key = new DatabaseEntry(headers.get(FlumeEvent.GUID).getBytes(UTF8));
- database.delete(txn, key);
- } catch (final Exception ex) {
- LOGGER.error("Error deleting key from database", ex);
- }
- }
- txn.commit();
- long count = dbCounter.get();
- while (!dbCounter.compareAndSet(count, count - batch.getEvents().size())) {
- count = dbCounter.get();
- }
- exception = null;
- break;
- } catch (final LockConflictException lce) {
- exception = lce;
- if (cursor != null) {
- try {
- cursor.close();
- cursor = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception closing cursor during lock conflict.");
- }
- }
- if (txn != null) {
- try {
- txn.abort();
- txn = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
- }
- }
- } catch (final Exception ex) {
- LOGGER.error("Unable to commit transaction", ex);
- if (txn != null) {
- txn.abort();
- }
- }
- } catch (final LockConflictException lce) {
- exception = lce;
- if (cursor != null) {
- try {
- cursor.close();
- cursor = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception closing cursor during lock conflict.");
- }
- }
- if (txn != null) {
- try {
- txn.abort();
- txn = null;
- } catch (final Exception ex) {
- LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
- }
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- cursor = null;
- }
- if (txn != null) {
- txn.abort();
- txn = null;
- }
- }
- try {
- Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
- } catch (final InterruptedException ie) {
- // Ignore the error
- }
- }
- if (exception != null) {
- LOGGER.error("Unable to delete events from data base", exception);
- }
- }
- } catch (final Exception ex) {
- LOGGER.error("Error reading database", ex);
- shutdown = true;
- throw ex;
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
-
- return errors;
- }
-
- private SimpleEvent createEvent(final DatabaseEntry data) {
- final SimpleEvent event = new SimpleEvent();
- try {
- byte[] eventData = data.getData();
- if (secretKey != null) {
- final Cipher cipher = Cipher.getInstance("AES");
- cipher.init(Cipher.DECRYPT_MODE, secretKey);
- eventData = cipher.doFinal(eventData);
- }
- final ByteArrayInputStream bais = new ByteArrayInputStream(eventData);
- final DataInputStream dais = new DataInputStream(bais);
- int length = dais.readInt();
- final byte[] bytes = new byte[length];
- dais.read(bytes, 0, length);
- event.setBody(bytes);
- length = dais.readInt();
- final Map<String, String> map = new HashMap<>(length);
- for (int i = 0; i < length; ++i) {
- final String headerKey = dais.readUTF();
- final String value = dais.readUTF();
- map.put(headerKey, value);
- }
- event.setHeaders(map);
- return event;
- } catch (final Exception ex) {
- LOGGER.error("Error retrieving event", ex);
- return null;
- }
- }
-
- }
-
- /**
- * Factory that creates Daemon threads that can be properly shut down.
- */
- private static class DaemonThreadFactory implements ThreadFactory {
- private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1);
- private final ThreadGroup group;
- private final AtomicInteger threadNumber = new AtomicInteger(1);
- private final String namePrefix;
-
- public DaemonThreadFactory() {
- final SecurityManager securityManager = System.getSecurityManager();
- group = securityManager != null ? securityManager.getThreadGroup() :
- Thread.currentThread().getThreadGroup();
- namePrefix = "DaemonPool-" + POOL_NUMBER.getAndIncrement() + "-thread-";
- }
-
- @Override
- public Thread newThread(final Runnable r) {
- final Thread thread = new Log4jThread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
- thread.setDaemon(true);
- if (thread.getPriority() != Thread.NORM_PRIORITY) {
- thread.setPriority(Thread.NORM_PRIORITY);
- }
- return thread;
- }
- }
-
- /**
- * An internal class.
- */
- private static class Gate {
-
- private boolean isOpen = false;
-
- public boolean isOpen() {
- return isOpen;
- }
-
- public synchronized void open() {
- isOpen = true;
- notifyAll();
- }
-
- public synchronized void close() {
- isOpen = false;
- }
-
- public synchronized void waitForOpen(final long timeout) throws InterruptedException {
- wait(timeout);
- }
- }
-}
+/*
+ * 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.flume.appender;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+
+import org.apache.flume.Event;
+import org.apache.flume.event.SimpleEvent;
+import org.apache.logging.log4j.LoggingException;
+import org.apache.logging.log4j.core.appender.ManagerFactory;
+import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
+import org.apache.logging.log4j.core.config.plugins.util.PluginType;
+import org.apache.logging.log4j.core.util.FileUtils;
+import org.apache.logging.log4j.core.util.Log4jThread;
+import org.apache.logging.log4j.core.util.SecretKeyProvider;
+import org.apache.logging.log4j.util.Strings;
+
+import com.sleepycat.je.Cursor;
+import com.sleepycat.je.CursorConfig;
+import com.sleepycat.je.Database;
+import com.sleepycat.je.DatabaseConfig;
+import com.sleepycat.je.DatabaseEntry;
+import com.sleepycat.je.Environment;
+import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.je.LockConflictException;
+import com.sleepycat.je.LockMode;
+import com.sleepycat.je.OperationStatus;
+import com.sleepycat.je.StatsConfig;
+import com.sleepycat.je.Transaction;
+
+/**
+ * Manager that persists data to Berkeley DB before passing it on to Flume.
+ */
+public class FlumePersistentManager extends FlumeAvroManager {
+
+ /** Attribute name for the key provider. */
+ public static final String KEY_PROVIDER = "keyProvider";
+
+ private static final Charset UTF8 = StandardCharsets.UTF_8;
+
+ private static final String DEFAULT_DATA_DIR = ".log4j/flumeData";
+
+ private static final int SHUTDOWN_WAIT = 60;
+
+ private static final int MILLIS_PER_SECOND = 1000;
+
+ private static final int LOCK_TIMEOUT_SLEEP_MILLIS = 500;
+
+ private static BDBManagerFactory factory = new BDBManagerFactory();
+
+ private final Database database;
+
+ private final Environment environment;
+
+ private final WriterThread worker;
+
+ private final Gate gate = new Gate();
+
+ private final SecretKey secretKey;
+
+ private final int lockTimeoutRetryCount;
+
+ private final ExecutorService threadPool;
+
+ private final AtomicLong dbCount = new AtomicLong();
+
+ /**
+ * Constructor
+ * @param name The unique name of this manager.
+ * @param shortName Original name for the Manager.
+ * @param agents An array of Agents.
+ * @param batchSize The number of events to include in a batch.
+ * @param retries The number of times to retry connecting before giving up.
+ * @param connectionTimeout The amount of time to wait for a connection to be established.
+ * @param requestTimeout The amount of time to wair for a response to a request.
+ * @param delay The amount of time to wait between retries.
+ * @param database The database to write to.
+ * @param environment The database environment.
+ * @param secretKey The SecretKey to use for encryption.
+ * @param lockTimeoutRetryCount The number of times to retry a lock timeout.
+ */
+ protected FlumePersistentManager(final String name, final String shortName, final Agent[] agents,
+ final int batchSize, final int retries, final int connectionTimeout,
+ final int requestTimeout, final int delay, final Database database,
+ final Environment environment, final SecretKey secretKey,
+ final int lockTimeoutRetryCount) {
+ super(name, shortName, agents, batchSize, delay, retries, connectionTimeout, requestTimeout);
+ this.database = database;
+ this.environment = environment;
+ dbCount.set(database.count());
+ this.worker = new WriterThread(database, environment, this, gate, batchSize, secretKey, dbCount,
+ lockTimeoutRetryCount);
+ this.worker.start();
+ this.secretKey = secretKey;
+ this.threadPool = Executors.newCachedThreadPool(new DaemonThreadFactory());
+ this.lockTimeoutRetryCount = lockTimeoutRetryCount;
+ }
+
+
+ /**
+ * Returns a FlumeAvroManager.
+ * @param name The name of the manager.
+ * @param agents The agents to use.
+ * @param properties Properties to pass to the Manager.
+ * @param batchSize The number of events to include in a batch.
+ * @param retries The number of times to retry connecting before giving up.
+ * @param connectionTimeout The amount of time to wait to establish a connection.
+ * @param requestTimeout The amount of time to wait for a response to a request.
+ * @param delayMillis Amount of time to delay before delivering a batch.
+ * @param lockTimeoutRetryCount The number of times to retry after a lock timeout.
+ * @param dataDir The location of the Berkeley database.
+ * @return A FlumeAvroManager.
+ */
+ public static FlumePersistentManager getManager(final String name, final Agent[] agents,
+ final Property[] properties, int batchSize, final int retries,
+ final int connectionTimeout, final int requestTimeout,
+ final int delayMillis, final int lockTimeoutRetryCount,
+ final String dataDir) {
+ if (agents == null || agents.length == 0) {
+ throw new IllegalArgumentException("At least one agent is required");
+ }
+
+ if (batchSize <= 0) {
+ batchSize = 1;
+ }
+ final String dataDirectory = Strings.isEmpty(dataDir) ? DEFAULT_DATA_DIR : dataDir;
+
+ final StringBuilder sb = new StringBuilder("FlumePersistent[");
+ boolean first = true;
+ for (final Agent agent : agents) {
+ if (!first) {
+ sb.append(',');
+ }
+ sb.append(agent.getHost()).append(':').append(agent.getPort());
+ first = false;
+ }
+ sb.append(']');
+ sb.append(' ').append(dataDirectory);
+ return getManager(sb.toString(), factory, new FactoryData(name, agents, batchSize, retries,
+ connectionTimeout, requestTimeout, delayMillis, lockTimeoutRetryCount, dataDir, properties));
+ }
+
+ @Override
+ public void send(final Event event) {
+ if (worker.isShutdown()) {
+ throw new LoggingException("Unable to record event");
+ }
+
+ final Map<String, String> headers = event.getHeaders();
+ final byte[] keyData = headers.get(FlumeEvent.GUID).getBytes(UTF8);
+ try {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final DataOutputStream daos = new DataOutputStream(baos);
+ daos.writeInt(event.getBody().length);
+ daos.write(event.getBody(), 0, event.getBody().length);
+ daos.writeInt(event.getHeaders().size());
+ for (final Map.Entry<String, String> entry : headers.entrySet()) {
+ daos.writeUTF(entry.getKey());
+ daos.writeUTF(entry.getValue());
+ }
+ byte[] eventData = baos.toByteArray();
+ if (secretKey != null) {
+ final Cipher cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+ eventData = cipher.doFinal(eventData);
+ }
+ final Future<Integer> future = threadPool.submit(new BDBWriter(keyData, eventData, environment, database,
+ gate, dbCount, getBatchSize(), lockTimeoutRetryCount));
+ boolean interrupted = false;
+ int ieCount = 0;
+ do {
+ try {
+ future.get();
+ } catch (final InterruptedException ie) {
+ interrupted = true;
+ ++ieCount;
+ }
+ } while (interrupted && ieCount <= 1);
+
+ } catch (final Exception ex) {
+ throw new LoggingException("Exception occurred writing log event", ex);
+ }
+ }
+
+ @Override
+ protected void releaseSub() {
+ LOGGER.debug("Shutting down FlumePersistentManager");
+ worker.shutdown();
+ try {
+ worker.join(SHUTDOWN_WAIT * MILLIS_PER_SECOND);
+ } catch (final InterruptedException ie) {
+ // Ignore the exception and shutdown.
+ }
+ threadPool.shutdown();
+ try {
+ threadPool.awaitTermination(SHUTDOWN_WAIT, TimeUnit.SECONDS);
+ } catch (final InterruptedException e) {
+ logWarn("PersistentManager Thread pool failed to shut down", e);
+ }
+ try {
+ worker.join();
+ } catch (final InterruptedException ex) {
+ logDebug("interrupted while waiting for worker to complete", ex);
+ }
+ try {
+ LOGGER.debug("FlumePersistenceManager dataset status: {}", database.getStats(new StatsConfig()));
+ database.close();
+ } catch (final Exception ex) {
+ logWarn("Failed to close database", ex);
+ }
+ try {
+ environment.cleanLog();
+ environment.close();
+ } catch (final Exception ex) {
+ logWarn("Failed to close environment", ex);
+ }
+ super.releaseSub();
+ }
+
+ private void doSend(final SimpleEvent event) {
+ LOGGER.debug("Sending event to Flume");
+ super.send(event);
+ }
+
+ /**
+ * Thread for writing to Berkeley DB to avoid having interrupts close the database.
+ */
+ private static class BDBWriter implements Callable<Integer> {
+ private final byte[] eventData;
+ private final byte[] keyData;
+ private final Environment environment;
+ private final Database database;
+ private final Gate gate;
+ private final AtomicLong dbCount;
+ private final long batchSize;
+ private final int lockTimeoutRetryCount;
+
+ public BDBWriter(final byte[] keyData, final byte[] eventData, final Environment environment,
+ final Database database, final Gate gate, final AtomicLong dbCount, final long batchSize,
+ final int lockTimeoutRetryCount) {
+ this.keyData = keyData;
+ this.eventData = eventData;
+ this.environment = environment;
+ this.database = database;
+ this.gate = gate;
+ this.dbCount = dbCount;
+ this.batchSize = batchSize;
+ this.lockTimeoutRetryCount = lockTimeoutRetryCount;
+ }
+
+ @Override
+ public Integer call() throws Exception {
+ final DatabaseEntry key = new DatabaseEntry(keyData);
+ final DatabaseEntry data = new DatabaseEntry(eventData);
+ Exception exception = null;
+ for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
+ Transaction txn = null;
+ try {
+ txn = environment.beginTransaction(null, null);
+ try {
+ database.put(txn, key, data);
+ txn.commit();
+ txn = null;
+ if (dbCount.incrementAndGet() >= batchSize) {
+ gate.open();
+ }
+ exception = null;
+ break;
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ // Fall through and retry.
+ } catch (final Exception ex) {
+ if (txn != null) {
+ txn.abort();
+ }
+ throw ex;
+ } finally {
+ if (txn != null) {
+ txn.abort();
+ txn = null;
+ }
+ }
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ if (txn != null) {
+ try {
+ txn.abort();
+ txn = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignoring exception while aborting transaction during lock conflict.");
+ }
+ }
+
+ }
+ try {
+ Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
+ } catch (final InterruptedException ie) {
+ // Ignore the error
+ }
+ }
+ if (exception != null) {
+ throw exception;
+ }
+ return eventData.length;
+ }
+ }
+
+ /**
+ * Factory data.
+ */
+ private static class FactoryData {
+ private final String name;
+ private final Agent[] agents;
+ private final int batchSize;
+ private final String dataDir;
+ private final int retries;
+ private final int connectionTimeout;
+ private final int requestTimeout;
+ private final int delayMillis;
+ private final int lockTimeoutRetryCount;
+ private final Property[] properties;
+
+ /**
+ * Constructor.
+ * @param name The name of the Appender.
+ * @param agents The agents.
+ * @param batchSize The number of events to include in a batch.
+ * @param dataDir The directory for data.
+ */
+ public FactoryData(final String name, final Agent[] agents, final int batchSize, final int retries,
+ final int connectionTimeout, final int requestTimeout, final int delayMillis,
+ final int lockTimeoutRetryCount, final String dataDir, final Property[] properties) {
+ this.name = name;
+ this.agents = agents;
+ this.batchSize = batchSize;
+ this.dataDir = dataDir;
+ this.retries = retries;
+ this.connectionTimeout = connectionTimeout;
+ this.requestTimeout = requestTimeout;
+ this.delayMillis = delayMillis;
+ this.lockTimeoutRetryCount = lockTimeoutRetryCount;
+ this.properties = properties;
+ }
+ }
+
+ /**
+ * Avro Manager Factory.
+ */
+ private static class BDBManagerFactory implements ManagerFactory<FlumePersistentManager, FactoryData> {
+
+ /**
+ * Create the FlumeKratiManager.
+ * @param name The name of the entity to manage.
+ * @param data The data required to create the entity.
+ * @return The FlumeKratiManager.
+ */
+ @Override
+ public FlumePersistentManager createManager(final String name, final FactoryData data) {
+ SecretKey secretKey = null;
+ Database database = null;
+ Environment environment = null;
+
+ final Map<String, String> properties = new HashMap<>();
+ if (data.properties != null) {
+ for (final Property property : data.properties) {
+ properties.put(property.getName(), property.getValue());
+ }
+ }
+
+ try {
+ final File dir = new File(data.dataDir);
+ FileUtils.mkdir(dir, true);
+ final EnvironmentConfig dbEnvConfig = new EnvironmentConfig();
+ dbEnvConfig.setTransactional(true);
+ dbEnvConfig.setAllowCreate(true);
+ dbEnvConfig.setLockTimeout(5, TimeUnit.SECONDS);
+ environment = new Environment(dir, dbEnvConfig);
+ final DatabaseConfig dbConfig = new DatabaseConfig();
+ dbConfig.setTransactional(true);
+ dbConfig.setAllowCreate(true);
+ database = environment.openDatabase(null, name, dbConfig);
+ } catch (final Exception ex) {
+ LOGGER.error("Could not create FlumePersistentManager", ex);
+ // For consistency, close database as well as environment even though it should never happen since the
+ // database is that last thing in the block above, but this does guard against a future line being
+ // inserted at the end that would bomb (like some debug logging).
+ if (database != null) {
+ database.close();
+ database = null;
+ }
+ if (environment != null) {
+ environment.close();
+ environment = null;
+ }
+ return null;
+ }
+
+ try {
+ String key = null;
+ for (final Map.Entry<String, String> entry : properties.entrySet()) {
+ if (entry.getKey().equalsIgnoreCase(KEY_PROVIDER)) {
+ key = entry.getValue();
+ break;
+ }
+ }
+ if (key != null) {
+ final PluginManager manager = new PluginManager("KeyProvider");
+ manager.collectPlugins();
+ final Map<String, PluginType<?>> plugins = manager.getPlugins();
+ if (plugins != null) {
+ boolean found = false;
+ for (final Map.Entry<String, PluginType<?>> entry : plugins.entrySet()) {
+ if (entry.getKey().equalsIgnoreCase(key)) {
+ found = true;
+ final Class<?> cl = entry.getValue().getPluginClass();
+ try {
+ final SecretKeyProvider provider = (SecretKeyProvider) cl.newInstance();
+ secretKey = provider.getSecretKey();
+ LOGGER.debug("Persisting events using SecretKeyProvider {}", cl.getName());
+ } catch (final Exception ex) {
+ LOGGER.error("Unable to create SecretKeyProvider {}, encryption will be disabled",
+ cl.getName());
+ }
+ break;
+ }
+ }
+ if (!found) {
+ LOGGER.error("Unable to locate SecretKey provider {}, encryption will be disabled", key);
+ }
+ } else {
+ LOGGER.error("Unable to locate SecretKey provider {}, encryption will be disabled", key);
+ }
+ }
+ } catch (final Exception ex) {
+ LOGGER.warn("Error setting up encryption - encryption will be disabled", ex);
+ }
+ return new FlumePersistentManager(name, data.name, data.agents, data.batchSize, data.retries,
+ data.connectionTimeout, data.requestTimeout, data.delayMillis, database, environment, secretKey,
+ data.lockTimeoutRetryCount);
+ }
+ }
+
+ /**
+ * Thread that sends data to Flume and pulls it from Berkeley DB.
+ */
+ private static class WriterThread extends Thread {
+ private volatile boolean shutdown = false;
+ private final Database database;
+ private final Environment environment;
+ private final FlumePersistentManager manager;
+ private final Gate gate;
+ private final SecretKey secretKey;
+ private final int batchSize;
+ private final AtomicLong dbCounter;
+ private final int lockTimeoutRetryCount;
+
+ public WriterThread(final Database database, final Environment environment,
+ final FlumePersistentManager manager, final Gate gate, final int batchsize,
+ final SecretKey secretKey, final AtomicLong dbCount, final int lockTimeoutRetryCount) {
+ this.database = database;
+ this.environment = environment;
+ this.manager = manager;
+ this.gate = gate;
+ this.batchSize = batchsize;
+ this.secretKey = secretKey;
+ this.setDaemon(true);
+ this.dbCounter = dbCount;
+ this.lockTimeoutRetryCount = lockTimeoutRetryCount;
+ }
+
+ public void shutdown() {
+ LOGGER.debug("Writer thread shutting down");
+ this.shutdown = true;
+ gate.open();
+ }
+
+ public boolean isShutdown() {
+ return shutdown;
+ }
+
+ @Override
+ public void run() {
+ LOGGER.trace("WriterThread started - batch size = " + batchSize + ", delayMillis = " + manager.getDelayMillis());
+ long nextBatchMillis = System.currentTimeMillis() + manager.getDelayMillis();
+ while (!shutdown) {
+ final long nowMillis = System.currentTimeMillis();
+ final long dbCount = database.count();
+ dbCounter.set(dbCount);
+ if (dbCount >= batchSize || dbCount > 0 && nextBatchMillis <= nowMillis) {
+ nextBatchMillis = nowMillis + manager.getDelayMillis();
+ try {
+ boolean errors = false;
+ final DatabaseEntry key = new DatabaseEntry();
+ final DatabaseEntry data = new DatabaseEntry();
+
+ gate.close();
+ OperationStatus status;
+ if (batchSize > 1) {
+ try {
+ errors = sendBatch(key, data);
+ } catch (final Exception ex) {
+ break;
+ }
+ } else {
+ Exception exception = null;
+ for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
+ exception = null;
+ Transaction txn = null;
+ Cursor cursor = null;
+ try {
+ txn = environment.beginTransaction(null, null);
+ cursor = database.openCursor(txn, null);
+ try {
+ status = cursor.getFirst(key, data, LockMode.RMW);
+ while (status == OperationStatus.SUCCESS) {
+ final SimpleEvent event = createEvent(data);
+ if (event != null) {
+ try {
+ manager.doSend(event);
+ } catch (final Exception ioe) {
+ errors = true;
+ LOGGER.error("Error sending event", ioe);
+ break;
+ }
+ try {
+ cursor.delete();
+ } catch (final Exception ex) {
+ LOGGER.error("Unable to delete event", ex);
+ }
+ }
+ status = cursor.getNext(key, data, LockMode.RMW);
+ }
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+ txn.commit();
+ txn = null;
+ dbCounter.decrementAndGet();
+ exception = null;
+ break;
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ // Fall through and retry.
+ } catch (final Exception ex) {
+ LOGGER.error("Error reading or writing to database", ex);
+ shutdown = true;
+ break;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+ if (txn != null) {
+ txn.abort();
+ txn = null;
+ }
+ }
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ if (cursor != null) {
+ try {
+ cursor.close();
+ cursor = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception closing cursor during lock conflict.");
+ }
+ }
+ if (txn != null) {
+ try {
+ txn.abort();
+ txn = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception aborting tx during lock conflict.");
+ }
+ }
+ }
+ try {
+ Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
+ } catch (final InterruptedException ie) {
+ // Ignore the error
+ }
+ }
+ if (exception != null) {
+ LOGGER.error("Unable to read or update data base", exception);
+ }
+ }
+ if (errors) {
+ Thread.sleep(manager.getDelayMillis());
+ continue;
+ }
+ } catch (final Exception ex) {
+ LOGGER.warn("WriterThread encountered an exception. Continuing.", ex);
+ }
+ } else {
+ if (nextBatchMillis <= nowMillis) {
+ nextBatchMillis = nowMillis + manager.getDelayMillis();
+ }
+ try {
+ final long interval = nextBatchMillis - nowMillis;
+ gate.waitForOpen(interval);
+ } catch (final InterruptedException ie) {
+ LOGGER.warn("WriterThread interrupted, continuing");
+ } catch (final Exception ex) {
+ LOGGER.error("WriterThread encountered an exception waiting for work", ex);
+ break;
+ }
+ }
+ }
+
+ if (batchSize > 1 && database.count() > 0) {
+ final DatabaseEntry key = new DatabaseEntry();
+ final DatabaseEntry data = new DatabaseEntry();
+ try {
+ sendBatch(key, data);
+ } catch (final Exception ex) {
+ LOGGER.warn("Unable to write final batch");
+ }
+ }
+ LOGGER.trace("WriterThread exiting");
+ }
+
+ private boolean sendBatch(DatabaseEntry key, final DatabaseEntry data) throws Exception {
+ boolean errors = false;
+ OperationStatus status;
+ Cursor cursor = null;
+ try {
+ final BatchEvent batch = new BatchEvent();
+ for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
+ try {
+ cursor = database.openCursor(null, CursorConfig.DEFAULT);
+ status = cursor.getFirst(key, data, null);
+
+ for (int i = 0; status == OperationStatus.SUCCESS && i < batchSize; ++i) {
+ final SimpleEvent event = createEvent(data);
+ if (event != null) {
+ batch.addEvent(event);
+ }
+ status = cursor.getNext(key, data, null);
+ }
+ break;
+ } catch (final LockConflictException lce) {
+ if (cursor != null) {
+ try {
+ cursor.close();
+ cursor = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception closing cursor during lock conflict.");
+ }
+ }
+ }
+ }
+
+ try {
+ manager.send(batch);
+ } catch (final Exception ioe) {
+ LOGGER.error("Error sending events", ioe);
+ errors = true;
+ }
+ if (!errors) {
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+ Transaction txn = null;
+ Exception exception = null;
+ for (int retryIndex = 0; retryIndex < lockTimeoutRetryCount; ++retryIndex) {
+ try {
+ txn = environment.beginTransaction(null, null);
+ try {
+ for (final Event event : batch.getEvents()) {
+ try {
+ final Map<String, String> headers = event.getHeaders();
+ key = new DatabaseEntry(headers.get(FlumeEvent.GUID).getBytes(UTF8));
+ database.delete(txn, key);
+ } catch (final Exception ex) {
+ LOGGER.error("Error deleting key from database", ex);
+ }
+ }
+ txn.commit();
+ long count = dbCounter.get();
+ while (!dbCounter.compareAndSet(count, count - batch.getEvents().size())) {
+ count = dbCounter.get();
+ }
+ exception = null;
+ break;
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ if (cursor != null) {
+ try {
+ cursor.close();
+ cursor = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception closing cursor during lock conflict.");
+ }
+ }
+ if (txn != null) {
+ try {
+ txn.abort();
+ txn = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
+ }
+ }
+ } catch (final Exception ex) {
+ LOGGER.error("Unable to commit transaction", ex);
+ if (txn != null) {
+ txn.abort();
+ }
+ }
+ } catch (final LockConflictException lce) {
+ exception = lce;
+ if (cursor != null) {
+ try {
+ cursor.close();
+ cursor = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception closing cursor during lock conflict.");
+ }
+ }
+ if (txn != null) {
+ try {
+ txn.abort();
+ txn = null;
+ } catch (final Exception ex) {
+ LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ cursor = null;
+ }
+ if (txn != null) {
+ txn.abort();
+ txn = null;
+ }
+ }
+ try {
+ Thread.sleep(LOCK_TIMEOUT_SLEEP_MILLIS);
+ } catch (final InterruptedException ie) {
+ // Ignore the error
+ }
+ }
+ if (exception != null) {
+ LOGGER.error("Unable to delete events from data base", exception);
+ }
+ }
+ } catch (final Exception ex) {
+ LOGGER.error("Error reading database", ex);
+ shutdown = true;
+ throw ex;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return errors;
+ }
+
+ private SimpleEvent createEvent(final DatabaseEntry data) {
+ final SimpleEvent event = new SimpleEvent();
+ try {
+ byte[] eventData = data.getData();
+ if (secretKey != null) {
+ final Cipher cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.DECRYPT_MODE, secretKey);
+ eventData = cipher.doFinal(eventData);
+ }
+ final ByteArrayInputStream bais = new ByteArrayInputStream(eventData);
+ final DataInputStream dais = new DataInputStream(bais);
+ int length = dais.readInt();
+ final byte[] bytes = new byte[length];
+ dais.read(bytes, 0, length);
+ event.setBody(bytes);
+ length = dais.readInt();
+ final Map<String, String> map = new HashMap<>(length);
+ for (int i = 0; i < length; ++i) {
+ final String headerKey = dais.readUTF();
+ final String value = dais.readUTF();
+ map.put(headerKey, value);
+ }
+ event.setHeaders(map);
+ return event;
+ } catch (final Exception ex) {
+ LOGGER.error("Error retrieving event", ex);
+ return null;
+ }
+ }
+
+ }
+
+ /**
+ * Factory that creates Daemon threads that can be properly shut down.
+ */
+ private static class DaemonThreadFactory implements ThreadFactory {
+ private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1);
+ private final ThreadGroup group;
+ private final AtomicInteger threadNumber = new AtomicInteger(1);
+ private final String namePrefix;
+
+ public DaemonThreadFactory() {
+ final SecurityManager securityManager = System.getSecurityManager();
+ group = securityManager != null ? securityManager.getThreadGroup() :
+ Thread.currentThread().getThreadGroup();
+ namePrefix = "DaemonPool-" + POOL_NUMBER.getAndIncrement() + "-thread-";
+ }
+
+ @Override
+ public Thread newThread(final Runnable r) {
+ final Thread thread = new Log4jThread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
+ thread.setDaemon(true);
+ if (thread.getPriority() != Thread.NORM_PRIORITY) {
+ thread.setPriority(Thread.NORM_PRIORITY);
+ }
+ return thread;
+ }
+ }
+
+ /**
+ * An internal class.
+ */
+ private static class Gate {
+
+ private boolean isOpen = false;
+
+ public boolean isOpen() {
+ return isOpen;
+ }
+
+ public synchronized void open() {
+ isOpen = true;
+ notifyAll();
+ }
+
+ public synchronized void close() {
+ isOpen = false;
+ }
+
+ public synchronized void waitForOpen(final long timeout) throws InterruptedException {
+ wait(timeout);
+ }
+ }
+}
[10/38] logging-log4j2 git commit: Javadoc.
Posted by rp...@apache.org.
Javadoc.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/0f1b0dc0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/0f1b0dc0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/0f1b0dc0
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 0f1b0dc00cd2d4d7c4b7be56da776879f62234cb
Parents: 4c077d3
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:52:26 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:52:26 2016 -0700
----------------------------------------------------------------------
.../org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0f1b0dc0/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
index 852f4e8..ef74c50 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.config.Property;
import org.apache.logging.log4j.message.Message;
/**
- *
+ * Always creates new LogEvent instances.
*/
public class DefaultLogEventFactory implements LogEventFactory {
[13/38] logging-log4j2 git commit: Use the standard US English
spelling for "behavior".
Posted by rp...@apache.org.
Use the standard US English spelling for "behavior".
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2aeebfe4
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2aeebfe4
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2aeebfe4
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 2aeebfe4db5e0914e6fd3775d96d956d46679bc1
Parents: 248efa4
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 15:32:03 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 15:32:03 2016 -0700
----------------------------------------------------------------------
.../src/main/java/org/apache/logging/log4j/util/Constants.java | 2 +-
.../logging/log4j/core/appender/MemoryMappedFileAppender.java | 2 +-
.../logging/log4j/core/appender/RandomAccessFileAppender.java | 2 +-
.../log4j/core/appender/RollingRandomAccessFileAppender.java | 2 +-
.../logging/log4j/core/async/AsyncQueueFullPolicyFactory.java | 4 ++--
.../main/java/org/apache/logging/log4j/core/util/Constants.java | 4 ++--
6 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
index 2b64550..6e84d10 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Constants.java
@@ -31,7 +31,7 @@ public final class Constants {
"log4j2.is.webapp", isClassAvailable("javax.servlet.Servlet"));
/**
- * Kill switch for object pooling in ThreadLocals that enables much of the LOG4J2-1270 no-GC behaviour.
+ * Kill switch for object pooling in ThreadLocals that enables much of the LOG4J2-1270 no-GC behavior.
* <p>
* {@code True} for non-{@link #IS_WEB_APP web apps}, disable by setting system property
* "log4j2.enable.threadlocals" to "false".
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
index 0949ffd..3270e29 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java
@@ -81,7 +81,7 @@ public final class MemoryMappedFileAppender extends AbstractOutputStreamAppender
@Override
public void append(final LogEvent event) {
- // Leverage the nice batching behaviour of async Loggers/Appenders:
+ // Leverage the nice batching behavior of async Loggers/Appenders:
// we can signal the file manager that it needs to flush the buffer
// to disk at the end of a batch.
// From a user's point of view, this means that all log events are
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
index 738816d..dcceb0d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java
@@ -77,7 +77,7 @@ public final class RandomAccessFileAppender extends AbstractOutputStreamAppender
@Override
public void append(final LogEvent event) {
- // Leverage the nice batching behaviour of async Loggers/Appenders:
+ // Leverage the nice batching behavior of async Loggers/Appenders:
// we can signal the file manager that it needs to flush the buffer
// to disk at the end of a batch.
// From a user's point of view, this means that all log events are
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
index 67777e6..2f8c805 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java
@@ -87,7 +87,7 @@ public final class RollingRandomAccessFileAppender extends AbstractOutputStreamA
final RollingRandomAccessFileManager manager = getManager();
manager.checkRollover(event);
- // Leverage the nice batching behaviour of async Loggers/Appenders:
+ // Leverage the nice batching behavior of async Loggers/Appenders:
// we can signal the file manager that it needs to flush the buffer
// to disk at the end of a batch.
// From a user's point of view, this means that all log events are
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
index 534a899..e8d7d5c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.util.PropertiesUtil;
* created by this factory is used in AsyncLogger, AsyncLoggerConfig and AsyncAppender
* to control if events are logged in the current thread, the background thread, or discarded.
* <p>
- * Property {@code "log4j2.AsyncQueueFullPolicy"} controls the routing behaviour. If this property is not specified or has
+ * Property {@code "log4j2.AsyncQueueFullPolicy"} controls the routing behavior. If this property is not specified or has
* value {@code "Default"}, this factory creates {@link DefaultAsyncQueueFullPolicy} objects.
* </p> <p>
* If this property has value {@code "Discard"}, this factory creates {@link DiscardingAsyncQueueFullPolicy} objects.
@@ -53,7 +53,7 @@ public class AsyncQueueFullPolicyFactory {
/**
* Creates and returns {@link AsyncQueueFullPolicy} instances based on user-specified system properties.
* <p>
- * Property {@code "log4j2.AsyncQueueFullPolicy"} controls the routing behaviour. If this property is not specified or
+ * Property {@code "log4j2.AsyncQueueFullPolicy"} controls the routing behavior. If this property is not specified or
* has value {@code "Default"}, this method returns {@link DefaultAsyncQueueFullPolicy} objects.
* </p> <p>
* If this property has value {@code "Discard"}, this method returns {@link DiscardingAsyncQueueFullPolicy} objects.
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2aeebfe4/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
index 09ec0bb..ab10360 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java
@@ -79,7 +79,7 @@ public final class Constants {
public static final boolean IS_WEB_APP = org.apache.logging.log4j.util.Constants.IS_WEB_APP;
/**
- * Kill switch for object pooling in ThreadLocals that enables much of the LOG4J2-1270 no-GC behaviour.
+ * Kill switch for object pooling in ThreadLocals that enables much of the LOG4J2-1270 no-GC behavior.
* <p>
* {@code True} for non-{@link #IS_WEB_APP web apps}, disable by setting system property
* "log4j2.enable.threadlocals" to "false".
@@ -89,7 +89,7 @@ public final class Constants {
public static final boolean ENABLE_THREADLOCALS = org.apache.logging.log4j.util.Constants.ENABLE_THREADLOCALS;
/**
- * Kill switch for garbage-free Layout behaviour that encodes LogEvents directly into
+ * Kill switch for garbage-free Layout behavior that encodes LogEvents directly into
* {@link org.apache.logging.log4j.core.layout.ByteBufferDestination}s without creating intermediate temporary
* Objects.
* <p>
[11/38] logging-log4j2 git commit: [LOG4J2-1482] Improper header in
CsvParameterLayout.
Posted by rp...@apache.org.
[LOG4J2-1482] Improper header in CsvParameterLayout.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ffc6c8f6
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ffc6c8f6
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ffc6c8f6
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: ffc6c8f68d260e8e14b140f0f05cbc77081efc2c
Parents: 0f1b0dc
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 15:03:26 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 15:03:26 2016 -0700
----------------------------------------------------------------------
.../log4j/core/impl/DefaultLogEventFactory.java | 5 ++
.../log4j/core/layout/AbstractStringLayout.java | 14 +--
.../logging/log4j/core/layout/JsonLayout.java | 5 +-
.../logging/log4j/core/layout/YamlLayout.java | 5 +-
.../log4j/core/layout/Log4j2_1482_CoreTest.java | 20 +++++
.../log4j/core/layout/Log4j2_1482_Test.java | 89 ++++++++++++++++++++
log4j-core/src/test/resources/log4j2-1482.xml | 27 ++++++
log4j-slf4j-impl/pom.xml | 5 ++
.../logging/slf4j/Log4j2_1482_Slf4jTest.java | 41 +++++++++
.../src/test/resources/log4j2-1482.xml | 27 ++++++
src/changes/changes.xml | 3 +
11 files changed, 231 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
index ef74c50..127b02a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/DefaultLogEventFactory.java
@@ -29,6 +29,11 @@ import org.apache.logging.log4j.message.Message;
*/
public class DefaultLogEventFactory implements LogEventFactory {
+ private static final DefaultLogEventFactory instance = new DefaultLogEventFactory();
+
+ public static DefaultLogEventFactory getInstance() {
+ return instance;
+ }
/**
* Creates a log event.
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
index 9e6270e..5ac98e7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/AbstractStringLayout.java
@@ -20,6 +20,8 @@ import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.StringLayout;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
+import org.apache.logging.log4j.core.impl.LogEventFactory;
import org.apache.logging.log4j.core.util.Constants;
import org.apache.logging.log4j.core.util.StringEncoder;
import org.apache.logging.log4j.util.PropertiesUtil;
@@ -202,7 +204,7 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
*/
@Override
public byte[] getFooter() {
- return serializeToBytes(footerSerializer, super.getFooter());
+ return serializeToBytes(footerSerializer, super.getFooter(), DefaultLogEventFactory.getInstance());
}
public Serializer getFooterSerializer() {
@@ -216,28 +218,28 @@ public abstract class AbstractStringLayout extends AbstractLayout<String> implem
*/
@Override
public byte[] getHeader() {
- return serializeToBytes(headerSerializer, super.getHeader());
+ return serializeToBytes(headerSerializer, super.getHeader(), DefaultLogEventFactory.getInstance());
}
public Serializer getHeaderSerializer() {
return headerSerializer;
}
- protected byte[] serializeToBytes(final Serializer serializer, final byte[] defaultValue) {
- final String serializable = serializeToString(serializer);
+ protected byte[] serializeToBytes(final Serializer serializer, final byte[] defaultValue, final LogEventFactory logEventFactory) {
+ final String serializable = serializeToString(serializer, logEventFactory);
if (serializer == null) {
return defaultValue;
}
return StringEncoder.toBytes(serializable, getCharset());
}
- protected String serializeToString(final Serializer serializer) {
+ protected String serializeToString(final Serializer serializer, final LogEventFactory logEventFactory) {
if (serializer == null) {
return null;
}
final LoggerConfig rootLogger = getConfiguration().getRootLogger();
// Using "" for the FQCN, does it matter?
- final LogEvent logEvent = rootLogger.getLogEventFactory().createEvent(rootLogger.getName(), null, Strings.EMPTY,
+ final LogEvent logEvent = logEventFactory.createEvent(rootLogger.getName(), null, Strings.EMPTY,
rootLogger.getLevel(), null, null, null);
return serializer.toSerializable(logEvent);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
index e9d87ae..239a59f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/JsonLayout.java
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
/**
* Appends a series of JSON events as strings serialized as bytes.
@@ -828,7 +829,7 @@ public final class JsonLayout extends AbstractJacksonLayout {
return null;
}
final StringBuilder buf = new StringBuilder();
- final String str = serializeToString(getHeaderSerializer());
+ final String str = serializeToString(getHeaderSerializer(), DefaultLogEventFactory.getInstance());
if (str != null) {
buf.append(str);
}
@@ -848,7 +849,7 @@ public final class JsonLayout extends AbstractJacksonLayout {
}
final StringBuilder buf = new StringBuilder();
buf.append(this.eol);
- final String str = serializeToString(getFooterSerializer());
+ final String str = serializeToString(getFooterSerializer(), DefaultLogEventFactory.getInstance());
if (str != null) {
buf.append(str);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
index 6f3e103..4b7a0c6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/YamlLayout.java
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
import org.apache.logging.log4j.util.Strings;
/**
@@ -728,7 +729,7 @@ public final class YamlLayout extends AbstractJacksonLayout {
return null;
}
final StringBuilder buf = new StringBuilder();
- final String str = serializeToString(getHeaderSerializer());
+ final String str = serializeToString(getHeaderSerializer(), DefaultLogEventFactory.getInstance());
if (str != null) {
buf.append(str);
}
@@ -748,7 +749,7 @@ public final class YamlLayout extends AbstractJacksonLayout {
}
final StringBuilder buf = new StringBuilder();
buf.append(this.eol);
- final String str = serializeToString(getFooterSerializer());
+ final String str = serializeToString(getFooterSerializer(), DefaultLogEventFactory.getInstance());
if (str != null) {
buf.append(str);
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
new file mode 100644
index 0000000..24a38b6
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_CoreTest.java
@@ -0,0 +1,20 @@
+package org.apache.logging.log4j.core.layout;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class Log4j2_1482_CoreTest extends Log4j2_1482_Test {
+
+ @Override
+ protected void log(int runNumber) {
+ if (runNumber == 2) {
+ // System.out.println("Set a breakpoint here.");
+ }
+ final Logger logger = LogManager.getLogger("auditcsvfile");
+ final int val1 = 9, val2 = 11, val3 = 12;
+ logger.info("Info Message!", val1, val2, val3);
+ logger.info("Info Message!", val1, val2, val3);
+ logger.info("Info Message!", val1, val2, val3);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
new file mode 100644
index 0000000..d25a6ac
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_1482_Test.java
@@ -0,0 +1,89 @@
+/*
+ * 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.layout;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configurator;
+import org.apache.logging.log4j.junit.CleanFolders;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Tests https://issues.apache.org/jira/browse/LOG4J2-1482
+ */
+public abstract class Log4j2_1482_Test {
+
+ static final String CONFIG_LOCATION = "log4j2-1482.xml";
+
+ static final String FOLDER = "target/log4j2-1482";
+
+ private static final int LOOP_COUNT = 10;
+
+ static void assertFileContents(int runNumber) throws IOException {
+ Path path = Paths.get(FOLDER + "/audit.tmp");
+ List<String> lines = Files.readAllLines(path, Charset.defaultCharset());
+ int i = 1;
+ final int size = lines.size();
+ for (String string : lines) {
+ if (string.startsWith(",,")) {
+ Path folder = Paths.get(FOLDER);
+ File[] files = folder.toFile().listFiles();
+ Arrays.sort(files);
+ System.out.println("Run " + runNumber + ": " + Arrays.toString(files));
+ Assert.fail(
+ String.format("Run %,d, line %,d of %,d: \"%s\" in %s", runNumber, i++, size, string, lines));
+ }
+ }
+ }
+
+ @Rule
+ public CleanFolders cleanFolders = new CleanFolders(FOLDER);
+
+ protected abstract void log(int runNumber) ;
+
+ private void loopingRun(int loopCount) throws IOException {
+ for (int i = 1; i <= loopCount; i++) {
+ try (LoggerContext loggerContext = Configurator.initialize(getClass().getName(),
+ CONFIG_LOCATION)) {
+ log(i);
+ }
+ assertFileContents(i);
+ }
+ }
+
+ @Test
+ public void testLoopingRun() throws IOException {
+ loopingRun(LOOP_COUNT);
+ }
+
+ @Test
+ public void testSingleRun() throws IOException {
+ loopingRun(1);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-core/src/test/resources/log4j2-1482.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j2-1482.xml b/log4j-core/src/test/resources/log4j2-1482.xml
new file mode 100644
index 0000000..e17953c
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j2-1482.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="warn" name="MyApp" packages="">
+ <Properties>
+ <Property name="audit-path">target/log4j2-1482</Property>
+ <Property name="file-name">audit</Property>
+ <Property name="file-header">param1,param2,param3${sys:line.separator}
+ </Property>
+ </Properties>
+
+ <Appenders>
+ <RollingFile name="auditfile" fileName="${audit-path}/${file-name}.tmp"
+ filePattern="${audit-path}/${file-name}-%d{yyyy-MM-dd}-%i.csv">
+ <CsvParameterLayout delimiter="," header="${file-header}">
+ </CsvParameterLayout>
+ <Policies>
+ <SizeBasedTriggeringPolicy size="80 B" />
+ </Policies>
+ <DefaultRolloverStrategy max="2" />
+ </RollingFile>
+ </Appenders>
+
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="auditfile" />
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-slf4j-impl/pom.xml b/log4j-slf4j-impl/pom.xml
index aca5799..21b02b1 100644
--- a/log4j-slf4j-impl/pom.xml
+++ b/log4j-slf4j-impl/pom.xml
@@ -58,6 +58,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-csv</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
----------------------------------------------------------------------
diff --git a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
new file mode 100644
index 0000000..d621e76
--- /dev/null
+++ b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/Log4j2_1482_Slf4jTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.slf4j;
+
+import org.apache.logging.log4j.core.layout.Log4j2_1482_Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests https://issues.apache.org/jira/browse/LOG4J2-1482
+ */
+public class Log4j2_1482_Slf4jTest extends Log4j2_1482_Test {
+
+ @Override
+ protected void log(int runNumber) {
+ if (runNumber == 2) {
+ // System.out.println("Set a breakpoint here.");
+ }
+ final Logger logger = LoggerFactory.getLogger("auditcsvfile");
+ final int val1 = 9, val2 = 11, val3 = 12;
+ logger.info("Info Message!", val1, val2, val3);
+ logger.info("Info Message!", val1, val2, val3);
+ logger.info("Info Message!", val1, val2, val3);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
----------------------------------------------------------------------
diff --git a/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml b/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
new file mode 100644
index 0000000..e17953c
--- /dev/null
+++ b/log4j-slf4j-impl/src/test/resources/log4j2-1482.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="warn" name="MyApp" packages="">
+ <Properties>
+ <Property name="audit-path">target/log4j2-1482</Property>
+ <Property name="file-name">audit</Property>
+ <Property name="file-header">param1,param2,param3${sys:line.separator}
+ </Property>
+ </Properties>
+
+ <Appenders>
+ <RollingFile name="auditfile" fileName="${audit-path}/${file-name}.tmp"
+ filePattern="${audit-path}/${file-name}-%d{yyyy-MM-dd}-%i.csv">
+ <CsvParameterLayout delimiter="," header="${file-header}">
+ </CsvParameterLayout>
+ <Policies>
+ <SizeBasedTriggeringPolicy size="80 B" />
+ </Policies>
+ <DefaultRolloverStrategy max="2" />
+ </RollingFile>
+ </Appenders>
+
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="auditfile" />
+ </Root>
+ </Loggers>
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ffc6c8f6/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b451094..31f280d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
</properties>
<body>
<release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+ <action issue="LOG4J2-1482" dev="ggregory" type="fix" due-to="Gary Gregory, Sumit Singhal">
+ Improper header in CsvParameterLayout.
+ </action>
<action issue="LOG4J2-1199" dev="rpopma" type="fix">
Document that JVM Input Arguments Lookup (JMX) is not available on Google App Engine.
</action>
[05/38] logging-log4j2 git commit: Internal error messages start with
a capital letter.
Posted by rp...@apache.org.
Internal error messages start with a capital letter.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9d757a11
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9d757a11
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9d757a11
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9d757a11de09927f27851f488b47c26d6a535ce0
Parents: 1d20db2
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 12:01:53 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 12:01:53 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/appender/db/AbstractDatabaseManager.java | 2 +-
.../main/java/org/apache/logging/log4j/core/net/SmtpManager.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9d757a11/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
index 67c7e4a..8d58ab6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.java
@@ -64,7 +64,7 @@ public abstract class AbstractDatabaseManager extends AbstractManager implements
this.startupInternal();
this.running = true;
} catch (final Exception e) {
- logError("could not perform database startup operations", e);
+ logError("Could not perform database startup operations", e);
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9d757a11/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
index a6bbad8..5367fa3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SmtpManager.java
@@ -171,7 +171,7 @@ public class SmtpManager extends AbstractManager {
sendMultipartMessage(message, mp);
} catch (final MessagingException | IOException | RuntimeException e) {
- logError("caught exception while sending e-mail notification.", e);
+ logError("Caught exception while sending e-mail notification.", e);
throw new LoggingException("Error occurred while sending email", e);
}
}
[31/38] logging-log4j2 git commit: Refactor context selectors to test.
Posted by rp...@apache.org.
Refactor context selectors to test.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dd5a2532
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dd5a2532
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dd5a2532
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: dd5a253234cebade3925c34f0b8ef5e565b2f2dd
Parents: 0af1bc2
Author: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Authored: Fri Aug 5 12:21:54 2016 -0700
Committer: ggregory <gg...@US-L-GG02.rocketsoftware.com>
Committed: Fri Aug 5 12:21:54 2016 -0700
----------------------------------------------------------------------
.../core/selector/CoreContextSelectors.java | 25 ++++++++++++++++++++
.../appender/JsonCompleteFileAppenderTest.java | 6 ++---
.../appender/XmlCompleteFileAppenderTest.java | 3 ++-
3 files changed, 29 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd5a2532/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java
new file mode 100644
index 0000000..1077e5a
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/CoreContextSelectors.java
@@ -0,0 +1,25 @@
+/*
+ * 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.selector;
+
+import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
+
+public class CoreContextSelectors {
+
+ public static final Class<?>[] CLASSES = new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class, AsyncLoggerContextSelector.class };
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd5a2532/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index b184421..47cb060 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -24,10 +24,8 @@ import java.io.File;
import java.io.FileReader;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
-import org.apache.logging.log4j.core.selector.BasicContextSelector;
-import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
+import org.apache.logging.log4j.core.selector.CoreContextSelectors;
import org.apache.logging.log4j.junit.CleanFiles;
import org.apache.logging.log4j.junit.LoggerContextRule;
import org.junit.Rule;
@@ -51,7 +49,7 @@ public class JsonCompleteFileAppenderTest {
@Parameters(name = "{0}")
public static Class<?>[] getParameters() {
- return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class, AsyncLoggerContextSelector.class };
+ return CoreContextSelectors.CLASSES;
}
private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd5a2532/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
index 9111825..2ad6e8f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
@@ -31,6 +31,7 @@ import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
import org.apache.logging.log4j.core.selector.BasicContextSelector;
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
+import org.apache.logging.log4j.core.selector.CoreContextSelectors;
import org.apache.logging.log4j.junit.CleanFiles;
import org.apache.logging.log4j.junit.LoggerContextRule;
import org.junit.Rule;
@@ -54,7 +55,7 @@ public class XmlCompleteFileAppenderTest {
@Parameters(name = "{0}")
public static Class<?>[] getParameters() {
- return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class, AsyncLoggerContextSelector.class };
+ return CoreContextSelectors.CLASSES;
}
private final File logFile = new File("target", "XmlCompleteFileAppenderTest.log");
[16/38] logging-log4j2 git commit: [LOG4J2-1496] Update Kafka client
from 0.9.1.0 to 0.10.0.0.
Posted by rp...@apache.org.
[LOG4J2-1496] Update Kafka client from 0.9.1.0 to 0.10.0.0.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6b3d461f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6b3d461f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6b3d461f
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 6b3d461fc37418c0e272d88d622443d9a2b603ad
Parents: 9318c40
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 18:51:08 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 18:51:08 2016 -0700
----------------------------------------------------------------------
pom.xml | 2 +-
src/changes/changes.xml | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6b3d461f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 291b55f..6b0b2c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -591,7 +591,7 @@
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
- <version>0.9.0.1</version>
+ <version>0.10.0.0</version>
</dependency>
<dependency>
<groupId>org.zeromq</groupId>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6b3d461f/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 112da21..d52b38f 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,9 @@
<action issue="LOG4J2-1495" dev="ggregory" type="update" due-to="Gary Gregory">
Update LMAX Disruptor from 3.3.4 to 3.3.5.
</action>
+ <action issue="LOG4J2-1496" dev="ggregory" type="update" due-to="Gary Gregory">
+ Update Kafka client from 0.9.1.0 to 0.10.0.0.
+ </action>
</release>
<release version="2.6.2" date="2016-07-05" description="GA Release 2.6.2">
<action issue="LOG4J2-904" dev="rgoers" type="fix" due-to="Bernhard M�hr">
[32/38] logging-log4j2 git commit: Fix test.
Posted by rp...@apache.org.
Fix test.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5b7b75d5
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5b7b75d5
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5b7b75d5
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 5b7b75d5f902d5f1427858c34330cf2550d308b7
Parents: dd5a253
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 16:51:49 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 16:51:49 2016 -0700
----------------------------------------------------------------------
.../core/appender/XmlCompleteFileAppenderTest.java | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5b7b75d5/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
index 2ad6e8f..b3d4430 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
@@ -125,18 +125,16 @@ public class XmlCompleteFileAppenderTest {
*/
@Test
public void testChildElementsAreCorrectlyIndented() throws Exception {
- final File file = new File("target", "XmlCompleteFileAppenderTest.log");
- file.delete();
- final Logger log = LogManager.getLogger("com.foo.Bar");
+ final Logger logger = this.loggerContextRule.getLogger("com.foo.Bar");
final String firstLogMsg = "First Msg tag must be in level 2 after correct indentation";
- log.info(firstLogMsg);
+ logger.info(firstLogMsg);
final String secondLogMsg = "Second Msg tag must also be in level 2 after correct indentation";
- log.info(secondLogMsg);
- CoreLoggerContexts.stopLoggerContext(false, file); // stop async thread
+ logger.info(secondLogMsg);
+ CoreLoggerContexts.stopLoggerContext(false, logFile); // stop async thread
final String[] lines = new String[9];
- try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
+ try (final BufferedReader reader = new BufferedReader(new FileReader(logFile))) {
int usefulLinesIndex = 0;
String readLine;
@@ -148,7 +146,7 @@ public class XmlCompleteFileAppenderTest {
}
}
} finally {
- file.delete();
+ logFile.delete();
}
String currentLine = lines[0];
[36/38] logging-log4j2 git commit: Collapse two levels of try now
that we use a try-with-resources.
Posted by rp...@apache.org.
Collapse two levels of try now that we use a try-with-resources.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dca3e56b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dca3e56b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dca3e56b
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: dca3e56b9ed2ab1ef7033e29d3e9bda64df87ce6
Parents: 1a49a34
Author: Gary Gregory <gg...@apache.org>
Authored: Sat Aug 6 12:08:26 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Sat Aug 6 12:08:26 2016 -0700
----------------------------------------------------------------------
.../log4j/core/appender/FileManager.java | 22 +++++++++-----------
1 file changed, 10 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dca3e56b/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 542edbf..af10d25 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
@@ -90,21 +90,19 @@ public class FileManager extends OutputStreamManager {
if (isLocking) {
final FileChannel channel = ((FileOutputStream) getOutputStream()).getChannel();
- try {
- /* Lock the whole file. This could be optimized to only lock from the current file
- position. Note that locking may be advisory on some systems and mandatory on others,
- so locking just from the current position would allow reading on systems where
- locking is mandatory. Also, Java 6 will throw an exception if the region of the
- file is already locked by another FileChannel in the same JVM. Hopefully, that will
- be avoided since every file should have a single file manager - unless two different
- files strings are configured that somehow map to the same file.*/
- try (final FileLock lock = channel.lock(0, Long.MAX_VALUE, false)) {
- super.write(bytes, offset, length, immediateFlush);
- }
+ /*
+ * Lock the whole file. This could be optimized to only lock from the current file position. Note that
+ * locking may be advisory on some systems and mandatory on others, so locking just from the current
+ * position would allow reading on systems where locking is mandatory. Also, Java 6 will throw an exception
+ * if the region of the file is already locked by another FileChannel in the same JVM. Hopefully, that will
+ * be avoided since every file should have a single file manager - unless two different files strings are
+ * configured that somehow map to the same file.
+ */
+ try (final FileLock lock = channel.lock(0, Long.MAX_VALUE, false)) {
+ super.write(bytes, offset, length, immediateFlush);
} catch (final IOException ex) {
throw new AppenderLoggingException("Unable to obtain lock on " + getName(), ex);
}
-
} else {
super.write(bytes, offset, length, immediateFlush);
}
[26/38] logging-log4j2 git commit: Parameterize
XmlCompleteFileAppenderTest.
Posted by rp...@apache.org.
Parameterize XmlCompleteFileAppenderTest.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1467acca
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1467acca
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1467acca
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 1467acca0f9f7ac2eeaf3d1ffb7f1883a2278c57
Parents: 9ee19e3
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:28:02 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:28:02 2016 -0700
----------------------------------------------------------------------
.../appender/XmlCompleteFileAppenderTest.java | 41 +++++++++++++++-----
1 file changed, 32 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1467acca/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
index ae772f2..ab4d79f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/XmlCompleteFileAppenderTest.java
@@ -23,45 +23,68 @@ import java.io.FileReader;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.CoreLoggerContexts;
+import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.core.selector.BasicContextSelector;
+import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
+import org.apache.logging.log4j.core.selector.ContextSelector;
+import org.apache.logging.log4j.junit.CleanFiles;
+import org.apache.logging.log4j.junit.LoggerContextRule;
import org.junit.BeforeClass;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
import static org.junit.Assert.*;
/**
* Tests a "complete" XML file a.k.a. a well-formed XML file.
*/
+@RunWith(Parameterized.class)
public class XmlCompleteFileAppenderTest {
- @BeforeClass
- public static void beforeClass() {
- System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
- "XmlCompleteFileAppenderTest.xml");
+ public XmlCompleteFileAppenderTest(Class<ContextSelector> contextSelector) {
+ this.loggerContextRule = new LoggerContextRule("XmlCompleteFileAppenderTest.xml", contextSelector);
+ this.cleanFiles = new CleanFiles(logFile);
+ this.ruleChain = RuleChain.outerRule(cleanFiles).around(loggerContextRule);
}
+ @Parameters(name = "{0}")
+ public static Class<?>[] getParameters() {
+ return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class, AsyncLoggerContextSelector.class };
+ }
+
+ private final File logFile = new File("target", "XmlCompleteFileAppenderTest.log");
+ private final LoggerContextRule loggerContextRule;
+ private final CleanFiles cleanFiles;
+
+ @Rule
+ public RuleChain ruleChain;
+
@Test
public void testFlushAtEndOfBatch() throws Exception {
- final File file = new File("target", "XmlCompleteFileAppenderTest.log");
// System.out.println(f.getAbsolutePath());
- file.delete();
+ logFile.delete();
final Logger log = LogManager.getLogger("com.foo.Bar");
final String logMsg = "Message flushed with immediate flush=false";
log.info(logMsg);
- CoreLoggerContexts.stopLoggerContext(false, file); // stop async thread
+ CoreLoggerContexts.stopLoggerContext(false, logFile); // stop async thread
String line1;
String line2;
String line3;
String line4;
- try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
+ try (final BufferedReader reader = new BufferedReader(new FileReader(logFile))) {
line1 = reader.readLine();
line2 = reader.readLine();
reader.readLine(); // ignore the empty line after the <Events> root
line3 = reader.readLine();
line4 = reader.readLine();
} finally {
- file.delete();
+ logFile.delete();
}
assertNotNull("line1", line1);
final String msg1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
[24/38] logging-log4j2 git commit: Run test with
AsyncLoggerContextSelector.
Posted by rp...@apache.org.
Run test with AsyncLoggerContextSelector.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5be1f3fb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5be1f3fb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5be1f3fb
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 5be1f3fb847aeb851e1bb6beadcda5ae1478b885
Parents: e67f3ed
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:17:05 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:17:05 2016 -0700
----------------------------------------------------------------------
.../logging/log4j/core/appender/JsonCompleteFileAppenderTest.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5be1f3fb/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index b6f8e70..22adba7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.io.FileReader;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
import org.apache.logging.log4j.core.selector.BasicContextSelector;
import org.apache.logging.log4j.core.selector.ClassLoaderContextSelector;
import org.apache.logging.log4j.core.selector.ContextSelector;
@@ -50,7 +51,7 @@ public class JsonCompleteFileAppenderTest {
@Parameters(name = "{0}")
public static Class<?>[] getParameters() {
- return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class };
+ return new Class<?>[] { ClassLoaderContextSelector.class, BasicContextSelector.class, AsyncLoggerContextSelector.class };
}
private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
[25/38] logging-log4j2 git commit: Better ivar names.
Posted by rp...@apache.org.
Better ivar names.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/9ee19e3c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/9ee19e3c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/9ee19e3c
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: 9ee19e3ce2979163300d0bff95dfd0f4fc5d0cb9
Parents: 5be1f3f
Author: Gary Gregory <gg...@apache.org>
Authored: Thu Aug 4 22:18:30 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Thu Aug 4 22:18:30 2016 -0700
----------------------------------------------------------------------
.../core/appender/JsonCompleteFileAppenderTest.java | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9ee19e3c/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
index 22adba7..4548521 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/JsonCompleteFileAppenderTest.java
@@ -44,9 +44,9 @@ import org.junit.runners.Parameterized.Parameters;
public class JsonCompleteFileAppenderTest {
public JsonCompleteFileAppenderTest(Class<ContextSelector> contextSelector) {
- this.init = new LoggerContextRule("JsonCompleteFileAppenderTest.xml", contextSelector);
- this.files = new CleanFiles(logFile);
- this.chain = RuleChain.outerRule(files).around(init);
+ this.loggerContextRule = new LoggerContextRule("JsonCompleteFileAppenderTest.xml", contextSelector);
+ this.cleanFiles = new CleanFiles(logFile);
+ this.ruleChain = RuleChain.outerRule(cleanFiles).around(loggerContextRule);
}
@Parameters(name = "{0}")
@@ -55,19 +55,19 @@ public class JsonCompleteFileAppenderTest {
}
private final File logFile = new File("target", "JsonCompleteFileAppenderTest.log");
- private final LoggerContextRule init;
- private final CleanFiles files;
+ private final LoggerContextRule loggerContextRule;
+ private final CleanFiles cleanFiles;
@Rule
- public RuleChain chain;
+ public RuleChain ruleChain;
@Test
public void testFlushAtEndOfBatch() throws Exception {
- final Logger log = this.init.getLogger("com.foo.Bar");
+ final Logger log = this.loggerContextRule.getLogger("com.foo.Bar");
final String logMsg = "Message flushed with immediate flush=true";
log.info(logMsg);
log.error(logMsg, new IllegalArgumentException("badarg"));
- this.init.getContext().stop(); // stops async thread
+ this.loggerContextRule.getContext().stop(); // stops async thread
String line1;
String line2;
String line3;
[19/38] logging-log4j2 git commit: Update tests from Groovy 2.4.5 to
2.4.7.
Posted by rp...@apache.org.
Update tests from Groovy 2.4.5 to 2.4.7.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f4f8eafb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f4f8eafb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f4f8eafb
Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: f4f8eafb787796828fe6779caf3c6d82534c89de
Parents: 365a541
Author: Gary Gregory <gg...@apache.org>
Authored: Wed Aug 3 22:33:31 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Wed Aug 3 22:33:31 2016 -0700
----------------------------------------------------------------------
log4j-core/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f4f8eafb/log4j-core/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml
index d06713d..87a66c2 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core/pom.xml
@@ -286,7 +286,7 @@
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>2.4.5</version>
+ <version>2.4.7</version>
<scope>test</scope>
</dependency>
<!-- GC-free -->