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 -->