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/28 10:32:04 UTC

[28/50] [abbrv] logging-log4j2 git commit: [LOG4J2-1540] The Core AbstractManager should track its LoggerContext. All appenders created with a Configuration object in their respective factories now pass that configuration's logger context to the managers

[LOG4J2-1540] The Core AbstractManager should track its LoggerContext.
All appenders created with a Configuration object in their respective
factories now pass that configuration's logger context to the managers
they create. If an appender is not given a Configuration, it cannot set
the logger context for its manager and it will be null.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/72259095
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/72259095
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/72259095

Branch: refs/heads/LOG4J2-1528
Commit: 722590956277af42d00089c67ca72a52c446a7b4
Parents: da5d6f3
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 26 08:08:10 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 26 08:08:10 2016 -0700

----------------------------------------------------------------------
 .../log4j/core/appender/AbstractManager.java    | 17 ++++++-
 .../core/appender/ConfigurationFactoryData.java | 50 ++++++++++++++++++++
 .../log4j/core/appender/FileAppender.java       | 12 ++---
 .../log4j/core/appender/FileManager.java        | 30 +++++++-----
 .../core/appender/OutputStreamManager.java      | 12 ++---
 .../core/appender/RandomAccessFileAppender.java |  2 +-
 .../core/appender/RandomAccessFileManager.java  | 27 ++++++-----
 .../core/appender/RollingFileAppender.java      | 16 +++----
 .../RollingRandomAccessFileAppender.java        |  2 +-
 .../log4j/core/appender/WriterManager.java      |  2 +-
 .../appender/db/AbstractDatabaseManager.java    |  2 +-
 .../log4j/core/appender/mom/JmsManager.java     |  2 +-
 .../core/appender/mom/jeromq/JeroMqManager.java |  2 +-
 .../core/appender/mom/kafka/KafkaManager.java   |  2 +-
 .../appender/rolling/RollingFileManager.java    | 35 +++++++-------
 .../rolling/RollingRandomAccessFileManager.java | 32 ++++++++-----
 .../logging/log4j/core/net/JndiManager.java     |  2 +-
 .../logging/log4j/core/net/SmtpManager.java     |  2 +-
 .../appender/RandomAccessFileManagerTest.java   | 18 +++----
 .../rolling/OnStartupTriggeringPolicyTest.java  |  2 +-
 .../RollingRandomAccessFileManagerTest.java     | 24 +++++-----
 .../flume/appender/AbstractFlumeManager.java    |  2 +-
 src/changes/changes.xml                         |  3 ++
 23 files changed, 192 insertions(+), 106 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
index 4c78e7f..4d7fc69 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
@@ -23,6 +23,7 @@ import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.status.StatusLogger;
 
@@ -48,8 +49,11 @@ public abstract class AbstractManager {
     protected int count;
 
     private final String name;
+    
+    private final LoggerContext loggerContext;
 
-    protected AbstractManager(final String name) {
+    protected AbstractManager(final LoggerContext loggerContext, final String name) {
+        this.loggerContext = loggerContext;
         this.name = name;
         LOGGER.debug("Starting {} {}", this.getClass().getSimpleName(), name);
     }
@@ -117,6 +121,17 @@ public abstract class AbstractManager {
     }
 
     /**
+     * Gets the logger context used to create this instance or null. The logger context is usually set when an appender
+     * creates a manager and that appender is given a Configuration. Not all appenders are given a Configuration by
+     * their factory method or builder.
+     * 
+     * @return the logger context used to create this instance or null.
+     */
+    public LoggerContext getLoggerContext() {
+        return loggerContext;
+    }
+
+    /**
      * Called to signify that this Manager is no longer required by an Appender.
      */
     public void release() {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConfigurationFactoryData.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConfigurationFactoryData.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConfigurationFactoryData.java
new file mode 100644
index 0000000..e2c20d4
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConfigurationFactoryData.java
@@ -0,0 +1,50 @@
+/*
+ * 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.appender;
+
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+
+/**
+ * Factory Data that carries a configuration.
+ */
+public class ConfigurationFactoryData {
+
+    /**
+     * This field is public to follow the style of existing FactoryData classes.
+     */
+    public final Configuration configuration;
+
+    public ConfigurationFactoryData(Configuration configuration) {
+        super();
+        this.configuration = configuration;
+    }
+
+    public Configuration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * Gets the LoggerContext from the Configuration or null.
+     * 
+     * @return the LoggerContext from the Configuration or null.
+     */
+    public LoggerContext getLoggerContext() {
+        return configuration != null ? configuration.getLoggerContext() : null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
index 736714d..b42f9da 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FileAppender.java
@@ -73,7 +73,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
         private boolean createOnDemand;
 
         @PluginConfiguration
-        private Configuration config;
+        private Configuration configuration;
 
         @Override
         public FileAppender build() {
@@ -87,13 +87,13 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
             Layout<? extends Serializable> layout = getOrCreateLayout();
 
             final FileManager manager = FileManager.getFileManager(fileName, append, locking, bufferedIo, createOnDemand,
-                    advertiseUri, layout, bufferSize, isImmediateFlush());
+                    advertiseUri, layout, bufferSize, isImmediateFlush(), configuration);
             if (manager == null) {
                 return null;
             }
 
             return new FileAppender(getName(), layout, getFilter(), manager, fileName, isIgnoreExceptions(),
-                    !bufferedIo || isImmediateFlush(), advertise ? config.getAdvertiser() : null);
+                    !bufferedIo || isImmediateFlush(), advertise ? configuration.getAdvertiser() : null);
         }
 
         public String getAdvertiseUri() {
@@ -104,8 +104,8 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
             return bufferSize;
         }
 
-        public Configuration getConfig() {
-            return config;
+        public Configuration getConfiguration() {
+            return configuration;
         }
 
         public String getFileName() {
@@ -158,7 +158,7 @@ public final class FileAppender extends AbstractOutputStreamAppender<FileManager
         }
 
         public B withConfiguration(final Configuration config) {
-            this.config = config;
+            this.configuration = config;
             return asBuilder();
         }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 2b9024b..33a2300 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
@@ -29,6 +29,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.Constants;
 
 
@@ -72,13 +74,12 @@ public class FileManager extends OutputStreamManager {
     }
 
     /** 
-     * @throws IOException 
      * @since 2.7 
      */
-    protected FileManager(final String fileName, final OutputStream os, final boolean append, final boolean locking, final boolean createOnDemand,
-            final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader,
-            final ByteBuffer buffer) throws IOException {
-        super(os, fileName, createOnDemand, layout, writeHeader, buffer);
+    protected FileManager(LoggerContext loggerContext, final String fileName, final OutputStream os, final boolean append, final boolean locking,
+            final boolean createOnDemand, final String advertiseURI, final Layout<? extends Serializable> layout,
+            final boolean writeHeader, final ByteBuffer buffer) {
+        super(loggerContext, os, fileName, createOnDemand, layout, writeHeader, buffer);
         this.isAppend = append;
         this.createOnDemand = createOnDemand;
         this.isLocking = locking;
@@ -97,18 +98,19 @@ public class FileManager extends OutputStreamManager {
      * @param layout The layout
      * @param bufferSize buffer size for buffered IO
      * @param immediateFlush true if the contents should be flushed on every write, false otherwise.
+     * @param configuration The configuration.
      * @return A FileManager for the File.
      */
     public static FileManager getFileManager(final String fileName, final boolean append, boolean locking,
             final boolean bufferedIo, final boolean createOnDemand, final String advertiseUri,
-            final Layout<? extends Serializable> layout, final int bufferSize, final boolean immediateFlush) {
+            final Layout<? extends Serializable> layout, final int bufferSize, final boolean immediateFlush,
+            Configuration configuration) {
 
         if (locking && bufferedIo) {
             locking = false;
         }
-        return (FileManager) getManager(fileName,
-                new FactoryData(append, locking, bufferedIo, bufferSize, immediateFlush, createOnDemand, advertiseUri, layout),
-                FACTORY);
+        return (FileManager) getManager(fileName, new FactoryData(append, locking, bufferedIo, bufferSize,
+                immediateFlush, createOnDemand, advertiseUri, layout, configuration), FACTORY);
     }
 
     @Override
@@ -198,7 +200,7 @@ public class FileManager extends OutputStreamManager {
     /**
      * Factory Data.
      */
-    private static class FactoryData {
+    private static class FactoryData extends ConfigurationFactoryData {
         private final boolean append;
         private final boolean locking;
         private final boolean bufferedIO;
@@ -218,10 +220,12 @@ public class FileManager extends OutputStreamManager {
          * @param createOnDemand if you want to lazy-create the file (a.k.a. on-demand.)
          * @param advertiseURI the URI to use when advertising the file
          * @param layout The layout
+         * @param configuration the configuration
          */
         public FactoryData(final boolean append, final boolean locking, final boolean bufferedIO, final int bufferSize,
                 final boolean immediateFlush, final boolean createOnDemand, final String advertiseURI,
-                final Layout<? extends Serializable> layout) {
+                final Layout<? extends Serializable> layout, Configuration configuration) {
+            super(configuration);
             this.append = append;
             this.locking = locking;
             this.bufferedIO = bufferedIO;
@@ -257,8 +261,8 @@ public class FileManager extends OutputStreamManager {
                 final int actualSize = data.bufferedIO ? data.bufferSize : Constants.ENCODER_BYTE_BUFFER_SIZE;
                 final ByteBuffer buffer = ByteBuffer.wrap(new byte[actualSize]);
                 final FileOutputStream fos = data.createOnDemand ? null : new FileOutputStream(file, data.append);
-                return new FileManager(name, fos, data.append, data.locking, data.createOnDemand, data.advertiseURI, data.layout,
-                        writeHeader, buffer);
+                return new FileManager(data.getLoggerContext(), name, fos, data.append, data.locking,
+                        data.createOnDemand, data.advertiseURI, data.layout, writeHeader, buffer);
             } catch (final IOException ex) {
                 LOGGER.error("FileManager (" + name + ") " + ex, ex);
             }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
index e5960ee..698409a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/OutputStreamManager.java
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
 import java.util.Objects;
 
 import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.layout.ByteBufferDestination;
 import org.apache.logging.log4j.core.util.Constants;
 
@@ -49,7 +50,7 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
     @Deprecated
     protected OutputStreamManager(final OutputStream os, final String streamName, final Layout<?> layout,
             final boolean writeHeader, final ByteBuffer byteBuffer) {
-        super(streamName);
+        super(null, streamName);
         this.os = os;
         this.layout = layout;
         if (writeHeader && layout != null) {
@@ -66,13 +67,12 @@ public class OutputStreamManager extends AbstractManager implements ByteBufferDe
     }
 
     /**
-     * @throws IOException 
      * @since 2.7
      */
-    protected OutputStreamManager(OutputStream os, final String streamName, final boolean createOnDemand,
-            final Layout<? extends Serializable> layout, final boolean writeHeader, final ByteBuffer byteBuffer)
-            throws IOException {
-        super(streamName);
+    protected OutputStreamManager(final LoggerContext loggerContext, OutputStream os, final String streamName,
+            final boolean createOnDemand, final Layout<? extends Serializable> layout, final boolean writeHeader,
+            final ByteBuffer byteBuffer) {
+        super(loggerContext, streamName);
         if (createOnDemand && os != null) {
             LOGGER.error(
                     "Invalid OutputStreamManager configuration for '{}': You cannot both set the OutputStream and request on-demand.",

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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..543c702 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
@@ -164,7 +164,7 @@ public final class RandomAccessFileAppender extends AbstractOutputStreamAppender
             layout = PatternLayout.createDefaultLayout();
         }
         final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(
-                fileName, isAppend, isFlush, bufferSize, advertiseURI, layout
+                fileName, isAppend, isFlush, bufferSize, advertiseURI, layout, null
         );
         if (manager == null) {
             return null;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 c87bdf3..7ab0fe3 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
@@ -26,6 +26,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.NullOutputStream;
 
 /**
@@ -42,10 +44,10 @@ public class RandomAccessFileManager extends OutputStreamManager {
     private final RandomAccessFile randomAccessFile;
     private final ThreadLocal<Boolean> isEndOfBatch = new ThreadLocal<>();
 
-    protected RandomAccessFileManager(final RandomAccessFile file,
-            final String fileName, final OutputStream os, final int bufferSize,
-            final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader) {
-        super(os, fileName, layout, writeHeader, ByteBuffer.wrap(new byte[bufferSize]));
+    protected RandomAccessFileManager(LoggerContext loggerContext, final RandomAccessFile file, final String fileName,
+            final OutputStream os, final int bufferSize, final String advertiseURI,
+            final Layout<? extends Serializable> layout, final boolean writeHeader) {
+        super(loggerContext, os, fileName, false, layout, writeHeader, ByteBuffer.wrap(new byte[bufferSize]));
         this.randomAccessFile = file;
         this.advertiseURI = advertiseURI;
         this.isEndOfBatch.set(Boolean.FALSE);
@@ -62,13 +64,14 @@ public class RandomAccessFileManager extends OutputStreamManager {
      * @param bufferSize The buffer size.
      * @param advertiseURI the URI to use when advertising the file
      * @param layout The layout.
+     * @param configuration The configuration.
      * @return A RandomAccessFileManager for the File.
      */
     public static RandomAccessFileManager getFileManager(final String fileName, final boolean append,
             final boolean isFlush, final int bufferSize, final String advertiseURI,
-            final Layout<? extends Serializable> layout) {
+            final Layout<? extends Serializable> layout, Configuration configuration) {
         return (RandomAccessFileManager) getManager(fileName, new FactoryData(append,
-                isFlush, bufferSize, advertiseURI, layout), FACTORY);
+                isFlush, bufferSize, advertiseURI, layout, configuration), FACTORY);
     }
 
     public Boolean isEndOfBatch() {
@@ -140,7 +143,7 @@ public class RandomAccessFileManager extends OutputStreamManager {
     /**
      * Factory Data.
      */
-    private static class FactoryData {
+    private static class FactoryData extends ConfigurationFactoryData {
         private final boolean append;
         private final boolean immediateFlush;
         private final int bufferSize;
@@ -152,9 +155,11 @@ public class RandomAccessFileManager extends OutputStreamManager {
          *
          * @param append Append status.
          * @param bufferSize size of the buffer
+         * @param configuration The configuration.
          */
-        public FactoryData(final boolean append, final boolean immediateFlush,
-                final int bufferSize, final String advertiseURI, final Layout<? extends Serializable> layout) {
+        public FactoryData(final boolean append, final boolean immediateFlush, final int bufferSize,
+                final String advertiseURI, final Layout<? extends Serializable> layout, Configuration configuration) {
+            super(configuration);
             this.append = append;
             this.immediateFlush = immediateFlush;
             this.bufferSize = bufferSize;
@@ -197,8 +202,8 @@ public class RandomAccessFileManager extends OutputStreamManager {
                 } else {
                     raf.setLength(0);
                 }
-                return new RandomAccessFileManager(raf, name, os,
-                        data.bufferSize, data.advertiseURI, data.layout, writeHeader);
+                return new RandomAccessFileManager(data.getLoggerContext(), raf, name,
+                        os, data.bufferSize, data.advertiseURI, data.layout, writeHeader);
             } catch (final Exception ex) {
                 LOGGER.error("RandomAccessFileManager (" + name + ") " + ex, ex);
             }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
index 899ddca..f8f66f2 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
@@ -94,7 +94,7 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
         private boolean createOnDemand;
 
         @PluginConfiguration
-        private Configuration config;
+        private Configuration configuration;
 
         @Override
         public RollingFileAppender build() {
@@ -126,17 +126,17 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
 
             if (strategy == null) {
                 strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
-                        String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
+                        String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, configuration);
             }
 
             if (strategy == null) {
                 strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
-                        String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, config);
+                        String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, configuration);
             }
 
             final RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, append,
                     bufferedIo, policy, strategy, advertiseUri, getLayout(), bufferSize, isImmediateFlush(),
-                    createOnDemand);
+                    createOnDemand, configuration);
             if (manager == null) {
                 return null;
             }
@@ -144,7 +144,7 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
             manager.initialize();
 
             return new RollingFileAppender(getName(), getLayout(), getFilter(), manager, fileName, filePattern,
-                    isIgnoreExceptions(), isImmediateFlush(), advertise ? config.getAdvertiser() : null);
+                    isIgnoreExceptions(), isImmediateFlush(), advertise ? configuration.getAdvertiser() : null);
         }
 
         public String getAdvertiseUri() {
@@ -155,8 +155,8 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
             return bufferSize;
         }
 
-        public Configuration getConfig() {
-            return config;
+        public Configuration getConfiguration() {
+            return configuration;
         }
 
         public String getFileName() {
@@ -209,7 +209,7 @@ public final class RollingFileAppender extends AbstractOutputStreamAppender<Roll
         }
 
         public B withConfiguration(final Configuration config) {
-            this.config = config;
+            this.configuration = config;
             return asBuilder();
         }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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..5e6f9c7 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
@@ -205,7 +205,7 @@ public final class RollingRandomAccessFileAppender extends AbstractOutputStreamA
         }
 
         final RollingRandomAccessFileManager manager = RollingRandomAccessFileManager.getRollingRandomAccessFileManager(
-                fileName, filePattern, isAppend, isFlush, bufferSize, policy, strategy, advertiseURI, layout);
+                fileName, filePattern, isAppend, isFlush, bufferSize, policy, strategy, advertiseURI, layout, config);
         if (manager == null) {
             return null;
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterManager.java
index 11ac856..b3b9e73 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/WriterManager.java
@@ -46,7 +46,7 @@ public class WriterManager extends AbstractManager {
 
     public WriterManager(final Writer writer, final String streamName, final StringLayout layout,
             final boolean writeHeader) {
-        super(streamName);
+        super(null, streamName);
         this.writer = writer;
         this.layout = layout;
         if (writeHeader && layout != null) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 82c7b18..c3682dc 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
@@ -41,7 +41,7 @@ public abstract class AbstractDatabaseManager extends AbstractManager implements
      * @param bufferSize The size of the log event buffer.
      */
     protected AbstractDatabaseManager(final String name, final int bufferSize) {
-        super(name);
+        super(null, name);
         this.bufferSize = bufferSize;
         this.buffer = new ArrayList<>(bufferSize + 1);
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
index f5f42c9..7cf1637 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
@@ -52,7 +52,7 @@ public class JmsManager extends AbstractManager {
     private JmsManager(final String name, final JndiManager jndiManager, final String connectionFactoryName,
                        final String destinationName, final String username, final String password)
         throws NamingException, JMSException {
-        super(name);
+        super(null, name);
         this.jndiManager = jndiManager;
         final ConnectionFactory connectionFactory = this.jndiManager.lookup(connectionFactoryName);
         if (username != null && password != null) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.java
index e84ab6d..6f106be 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.java
@@ -69,7 +69,7 @@ public class JeroMqManager extends AbstractManager {
     private final ZMQ.Socket publisher;
 
     private JeroMqManager(final String name, final JeroMqConfiguration config) {
-        super(name);
+        super(null, name);
         publisher = CONTEXT.socket(ZMQ.PUB);
         publisher.setAffinity(config.affinity);
         publisher.setBacklog(config.backlog);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
index d535e02..f222b59 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.java
@@ -44,7 +44,7 @@ public class KafkaManager extends AbstractManager {
     private final String topic;
 
     public KafkaManager(final String name, final String topic, final Property[] properties) {
-        super(name);
+        super(null, name);
         this.topic = topic;
         config.setProperty("key.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
         config.setProperty("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 3c6739f..b741b4e 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
@@ -17,7 +17,6 @@
 package org.apache.logging.log4j.core.appender.rolling;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -28,11 +27,13 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConfigurationFactoryData;
 import org.apache.logging.log4j.core.appender.FileManager;
 import org.apache.logging.log4j.core.appender.ManagerFactory;
 import org.apache.logging.log4j.core.appender.rolling.action.AbstractAction;
 import org.apache.logging.log4j.core.appender.rolling.action.Action;
-import org.apache.logging.log4j.core.util.Clock;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.util.Log4jThread;
 
@@ -81,15 +82,13 @@ public class RollingFileManager extends FileManager {
     }
 
     /**
-     * @throws IOException 
      * @since 2.7
      */
-    protected RollingFileManager(final String fileName, final String pattern, final OutputStream os, final boolean append,
-            final boolean createOnDemand, final long size, final long time, final TriggeringPolicy triggeringPolicy,
-            final RolloverStrategy rolloverStrategy, final String advertiseURI,
-            final Layout<? extends Serializable> layout, final boolean writeHeader, final ByteBuffer buffer)
-            throws IOException {
-        super(fileName, os, append, false, createOnDemand, advertiseURI, layout, writeHeader, buffer);
+    protected RollingFileManager(LoggerContext loggerContext, final String fileName, final String pattern, final OutputStream os,
+            final boolean append, final boolean createOnDemand, final long size, final long time,
+            final TriggeringPolicy triggeringPolicy, final RolloverStrategy rolloverStrategy,
+            final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader, final ByteBuffer buffer) {
+        super(loggerContext, fileName, os, append, false, createOnDemand, advertiseURI, layout, writeHeader, buffer);
         this.size = size;
         this.initialTime = time;
         this.triggeringPolicy = triggeringPolicy;
@@ -115,15 +114,16 @@ public class RollingFileManager extends FileManager {
      * @param bufferSize buffer size to use if bufferedIO is true
      * @param immediateFlush flush on every write or not
      * @param createOnDemand true if you want to lazy-create the file (a.k.a. on-demand.)
+     * @param configuration The configuration.
      * @return A RollingFileManager.
      */
     public static RollingFileManager getFileManager(final String fileName, final String pattern, final boolean append,
             final boolean bufferedIO, final TriggeringPolicy policy, final RolloverStrategy strategy,
             final String advertiseURI, final Layout<? extends Serializable> layout, final int bufferSize,
-            final boolean immediateFlush, final boolean createOnDemand) {
+            final boolean immediateFlush, final boolean createOnDemand, final Configuration configuration) {
 
         return (RollingFileManager) getManager(fileName, new FactoryData(pattern, append,
-            bufferedIO, policy, strategy, advertiseURI, layout, bufferSize, immediateFlush, createOnDemand), factory);
+            bufferedIO, policy, strategy, advertiseURI, layout, bufferSize, immediateFlush, createOnDemand, configuration), factory);
     }
 
     // override to make visible for unit tests
@@ -341,7 +341,7 @@ public class RollingFileManager extends FileManager {
     /**
      * Factory data.
      */
-    private static class FactoryData {
+    private static class FactoryData extends ConfigurationFactoryData {
         private final String pattern;
         private final boolean append;
         private final boolean bufferedIO;
@@ -354,7 +354,7 @@ public class RollingFileManager extends FileManager {
         private final Layout<? extends Serializable> layout;
 
         /**
-         * Create the data for the factory.
+         * Creates the data for the factory.
          * @param pattern The pattern.
          * @param append The append flag.
          * @param bufferedIO The bufferedIO flag.
@@ -363,11 +363,13 @@ public class RollingFileManager extends FileManager {
          * @param bufferSize the buffer size
          * @param immediateFlush flush on every write or not
          * @param createOnDemand true if you want to lazy-create the file (a.k.a. on-demand.)
+         * @param configuration The configuration
          */
         public FactoryData(final String pattern, final boolean append, final boolean bufferedIO,
                 final TriggeringPolicy policy, final RolloverStrategy strategy, final String advertiseURI,
                 final Layout<? extends Serializable> layout, final int bufferSize, final boolean immediateFlush, 
-                final boolean createOnDemand) {
+                final boolean createOnDemand, final Configuration configuration) {
+            super(configuration);
             this.pattern = pattern;
             this.append = append;
             this.bufferedIO = bufferedIO;
@@ -458,8 +460,9 @@ public class RollingFileManager extends FileManager {
                 final OutputStream os = data.createOnDemand ? null : new FileOutputStream(name, data.append);
                 final long time = data.createOnDemand? System.currentTimeMillis() : file.lastModified(); // LOG4J2-531 create file first so time has valid value
                 
-                return new RollingFileManager(name, data.pattern, os, data.append, data.createOnDemand, size, time, data.policy,
-                        data.strategy, data.advertiseURI, data.layout, writeHeader, buffer);
+                return new RollingFileManager(data.getLoggerContext(), name, data.pattern, os,
+                        data.append, data.createOnDemand, size, time, data.policy, data.strategy, data.advertiseURI,
+                        data.layout, writeHeader, buffer);
             } catch (final IOException ex) {
                 LOGGER.error("RollingFileManager (" + name + ") " + ex, ex);
             }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 4a92beb..8b39209 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
@@ -24,8 +24,11 @@ import java.io.Serializable;
 import java.nio.ByteBuffer;
 
 import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AppenderLoggingException;
+import org.apache.logging.log4j.core.appender.ConfigurationFactoryData;
 import org.apache.logging.log4j.core.appender.ManagerFactory;
+import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.NullOutputStream;
 
 /**
@@ -43,12 +46,13 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
     private RandomAccessFile randomAccessFile;
     private final ThreadLocal<Boolean> isEndOfBatch = new ThreadLocal<>();
 
-    public RollingRandomAccessFileManager(final RandomAccessFile raf, final String fileName, final String pattern,
-            final OutputStream os, final boolean append, final boolean immediateFlush, final int bufferSize,
-            final long size, final long time, final TriggeringPolicy policy, final RolloverStrategy strategy,
-            final String advertiseURI, final Layout<? extends Serializable> layout, final boolean writeHeader) {
-        super(fileName, pattern, os, append, size, time, policy, strategy, advertiseURI, layout, writeHeader,
-                ByteBuffer.wrap(new byte[bufferSize]));
+    public RollingRandomAccessFileManager(final LoggerContext loggerContext, final RandomAccessFile raf,
+            final String fileName, final String pattern, final OutputStream os, final boolean append,
+            final boolean immediateFlush, final int bufferSize, final long size, final long time,
+            final TriggeringPolicy policy, final RolloverStrategy strategy, final String advertiseURI,
+            final Layout<? extends Serializable> layout, final boolean writeHeader) {
+        super(loggerContext, fileName, pattern, os, append, false, size, time, policy, strategy, advertiseURI, layout,
+                writeHeader, ByteBuffer.wrap(new byte[bufferSize]));
         this.randomAccessFile = raf;
         isEndOfBatch.set(Boolean.FALSE);
         writeHeader();
@@ -78,9 +82,9 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
     public static RollingRandomAccessFileManager getRollingRandomAccessFileManager(final String fileName,
             final String filePattern, final boolean isAppend, final boolean immediateFlush, final int bufferSize,
             final TriggeringPolicy policy, final RolloverStrategy strategy, final String advertiseURI,
-            final Layout<? extends Serializable> layout) {
+            final Layout<? extends Serializable> layout, Configuration configuration) {
         return (RollingRandomAccessFileManager) getManager(fileName, new FactoryData(filePattern, isAppend,
-                immediateFlush, bufferSize, policy, strategy, advertiseURI, layout), FACTORY);
+                immediateFlush, bufferSize, policy, strategy, advertiseURI, layout, configuration), FACTORY);
     }
 
     public Boolean isEndOfBatch() {
@@ -182,9 +186,9 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
                     LOGGER.trace("RandomAccessFile {} set length to 0", name);
                     raf.setLength(0);
                 }
-                return new RollingRandomAccessFileManager(raf, name, data.pattern, NullOutputStream.NULL_OUTPUT_STREAM,
-                        data.append, data.immediateFlush, data.bufferSize, size, time, data.policy, data.strategy,
-                        data.advertiseURI, data.layout, writeHeader);
+                return new RollingRandomAccessFileManager(data.getLoggerContext(), raf, name, data.pattern,
+                        NullOutputStream.NULL_OUTPUT_STREAM, data.append, data.immediateFlush, data.bufferSize, size, time, data.policy,
+                        data.strategy, data.advertiseURI, data.layout, writeHeader);
             } catch (final IOException ex) {
                 LOGGER.error("Cannot access RandomAccessFile " + ex, ex);
                 if (raf != null) {
@@ -202,7 +206,7 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
     /**
      * Factory data.
      */
-    private static class FactoryData {
+    private static class FactoryData extends ConfigurationFactoryData {
         private final String pattern;
         private final boolean append;
         private final boolean immediateFlush;
@@ -223,10 +227,12 @@ public class RollingRandomAccessFileManager extends RollingFileManager {
          * @param strategy
          * @param advertiseURI
          * @param layout
+         * @param configuration
          */
         public FactoryData(final String pattern, final boolean append, final boolean immediateFlush,
                 final int bufferSize, final TriggeringPolicy policy, final RolloverStrategy strategy,
-                final String advertiseURI, final Layout<? extends Serializable> layout) {
+                final String advertiseURI, final Layout<? extends Serializable> layout, Configuration configuration) {
+            super(configuration);
             this.pattern = pattern;
             this.append = append;
             this.immediateFlush = immediateFlush;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
index 31009b6..c413373 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
@@ -39,7 +39,7 @@ public class JndiManager extends AbstractManager {
     private final Context context;
 
     private JndiManager(final String name, final Context context) {
-        super(name);
+        super(null, name);
         this.context = context;
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/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 5367fa3..5494911 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
@@ -77,7 +77,7 @@ public class SmtpManager extends AbstractManager {
 
     protected SmtpManager(final String name, final Session session, final MimeMessage message,
                           final FactoryData data) {
-        super(name);
+        super(null, name);
         this.session = session;
         this.message = message;
         this.data = data;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
index ac95668..fb84266 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
@@ -47,8 +47,8 @@ public class RandomAccessFileManagerTest {
         final File file = folder.newFile();
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.NULL_OUTPUT_STREAM;
-            final RandomAccessFileManager manager = new RandomAccessFileManager(raf, file.getName(), os,
-                    RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, true);
+            final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
+                    os, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, true);
 
             final int size = RandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3;
             final byte[] data = new byte[size];
@@ -68,8 +68,8 @@ public class RandomAccessFileManagerTest {
         final File file = folder.newFile();
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.NULL_OUTPUT_STREAM;
-            final RandomAccessFileManager manager = new RandomAccessFileManager(raf, file.getName(), os,
-                    RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, true);
+            final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
+                    os, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, true);
 
             final int size = RandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1;
             final byte[] data = new byte[size];
@@ -89,8 +89,8 @@ public class RandomAccessFileManagerTest {
             final int bufferSize = 4 * 1024;
             assertNotEquals(bufferSize, RandomAccessFileManager.DEFAULT_BUFFER_SIZE);
 
-            final RandomAccessFileManager manager = new RandomAccessFileManager(raf, file.getName(), os,
-                    bufferSize, null, null, true);
+            final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
+                    os, bufferSize, null, null, true);
 
             // check the resulting buffer size is what was requested
             assertEquals(bufferSize, manager.getBufferSize());
@@ -102,8 +102,8 @@ public class RandomAccessFileManagerTest {
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.NULL_OUTPUT_STREAM;
             final int bufferSize = 1;
-            final RandomAccessFileManager manager = new RandomAccessFileManager(raf, file.getName(), os,
-                    bufferSize, null, null, true);
+            final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
+                    os, bufferSize, null, null, true);
 
             final int size = bufferSize * 3 + 1;
             final byte[] data = new byte[size];
@@ -131,7 +131,7 @@ public class RandomAccessFileManagerTest {
         assertEquals("all flushed to disk", bytes.length, file.length());
 
         final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(
-                file.getAbsolutePath(), isAppend, true, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null);
+                file.getAbsolutePath(), isAppend, true, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, null);
         manager.write(bytes, 0, bytes.length, true);
         final int expected = bytes.length * 2;
         assertEquals("appended, not overwritten", expected, file.length());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index 27f8e7e..4ab6b5b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -78,7 +78,7 @@ public class OnStartupTriggeringPolicyTest {
                 configuration);
         final OnStartupTriggeringPolicy policy = OnStartupTriggeringPolicy.createPolicy(1);
         final RollingFileManager manager = RollingFileManager.getFileManager(TARGET_FILE, TARGET_PATTERN, true, false,
-                policy, strategy, null, layout, 8192, true, false);
+                policy, strategy, null, layout, 8192, true, false, configuration);
         try {
             manager.initialize();
             String files = Arrays.toString(new File(TARGET_FOLDER).listFiles());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
index 70f5aa1..c9486f0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
@@ -58,9 +58,9 @@ public class RollingRandomAccessFileManagerTest {
             final long time = System.currentTimeMillis();
             final TriggeringPolicy triggerPolicy = new SizeBasedTriggeringPolicy(triggerSize);
             final RolloverStrategy rolloverStrategy = null;
-            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(raf, file.getName(),
-                    Strings.EMPTY, os, append, flushNow, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE,
-                    triggerSize, time, triggerPolicy, rolloverStrategy, null, null, true);
+            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(null, raf,
+                    file.getName(), Strings.EMPTY, os, append, flushNow,
+                    RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, triggerSize, time, triggerPolicy, rolloverStrategy, null, null, true);
 
             final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3;
             final byte[] data = new byte[size];
@@ -87,9 +87,9 @@ public class RollingRandomAccessFileManagerTest {
             final long time = System.currentTimeMillis();
             final TriggeringPolicy triggerPolicy = new SizeBasedTriggeringPolicy(triggerSize);
             final RolloverStrategy rolloverStrategy = null;
-            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(raf, file.getName(),
-                    Strings.EMPTY, os, append, flushNow, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE,
-                    triggerSize, time, triggerPolicy, rolloverStrategy, null, null, true);
+            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(null, raf,
+                    file.getName(), Strings.EMPTY, os, append, flushNow,
+                    RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, triggerSize, time, triggerPolicy, rolloverStrategy, null, null, true);
 
             final int size = RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3 + 1;
             final byte[] data = new byte[size];
@@ -115,9 +115,9 @@ public class RollingRandomAccessFileManagerTest {
             final int bufferSize = 4 * 1024;
             assertNotEquals(bufferSize, RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE);
             final RolloverStrategy rolloverStrategy = null;
-            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(raf, file.getName(),
-                    Strings.EMPTY, os, append, flushNow, bufferSize, triggerSize, time, triggerPolicy, rolloverStrategy,
-                    null, null, true);
+            final RollingRandomAccessFileManager manager = new RollingRandomAccessFileManager(null, raf,
+                    file.getName(), Strings.EMPTY, os, append, flushNow, bufferSize, triggerSize, time, triggerPolicy,
+                    rolloverStrategy, null, null, true);
 
             // check the resulting buffer size is what was requested
             assertEquals(bufferSize, manager.getBufferSize());
@@ -149,7 +149,7 @@ public class RollingRandomAccessFileManagerTest {
                 //
                 file.getAbsolutePath(), Strings.EMPTY, isAppend, immediateFlush,
                 RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, new SizeBasedTriggeringPolicy(Long.MAX_VALUE), //
-                null, null, null);
+                null, null, null, null);
         manager.write(bytes, 0, bytes.length, immediateFlush);
         final int expected = bytes.length * 2;
         assertThat("appended, not overwritten", file, hasLength(expected));
@@ -171,7 +171,7 @@ public class RollingRandomAccessFileManagerTest {
                 //
                 file.getAbsolutePath(), Strings.EMPTY, isAppend, true,
                 RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, new SizeBasedTriggeringPolicy(Long.MAX_VALUE), //
-                null, null, null);
+                null, null, null, null);
         assertTrue(manager.getFileTime() < expectedMax);
         assertTrue(manager.getFileTime() >= expectedMin);
     }
@@ -189,7 +189,7 @@ public class RollingRandomAccessFileManagerTest {
                 //
                 file.getAbsolutePath(), Strings.EMPTY, isAppend, true,
                 RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE, new SizeBasedTriggeringPolicy(Long.MAX_VALUE), //
-                null, null, null);
+                null, null, null, null);
         assertThat(file, lastModified(equalTo(manager.getFileTime())));
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
----------------------------------------------------------------------
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
index 55fb858..8fc6ab4 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/AbstractFlumeManager.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.appender.AbstractManager;
 public abstract class AbstractFlumeManager extends AbstractManager {
 
     public AbstractFlumeManager(final String name) {
-        super(name);
+        super(null, name);
     }
 
     public abstract void send(Event event);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/72259095/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4c8303a..b170dc6 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -129,6 +129,9 @@
       <action issue="LOG4J2-1547" dev="ggregory" type="add" due-to="Gary Gregory">
         The Core AbstractConfiguration should track its LoggerContext and add Configuration.getLoggerContext().
       </action>
+      <action issue="LOG4J2-1540" dev="ggregory" type="add" due-to="Gary Gregory">
+        The Core AbstractManager should track its LoggerContext.
+      </action>
       <action issue="LOG4J2-1458" dev="ggregory" type="update" due-to="Gary Gregory">
         Update Jackson from 2.7.5 to 2.8.0.
       </action>