You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2016/11/12 09:07:10 UTC

logging-log4j2 git commit: [LOG4J2-1701]

Repository: logging-log4j2
Updated Branches:
  refs/heads/master ed0c5e86f -> ef2ab0df1


[LOG4J2-1701] 

Add a Builder to RandomAccessFileAppender and deprecate
RandomAccessFileAppender.createAppender().

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

Branch: refs/heads/master
Commit: ef2ab0df173fc023cdc8bd24b71d01a097b59bf4
Parents: ed0c5e8
Author: Gary Gregory <gg...@apache.org>
Authored: Sat Nov 12 01:07:06 2016 -0800
Committer: Gary Gregory <gg...@apache.org>
Committed: Sat Nov 12 01:07:06 2016 -0800

----------------------------------------------------------------------
 .../core/appender/RandomAccessFileAppender.java | 146 ++++++++++++++-----
 src/changes/changes.xml                         |   3 +
 2 files changed, 112 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ef2ab0df/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 63fe917d..b0a6ee5 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
@@ -28,11 +28,9 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Configuration;
 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.PluginBuilderAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
 import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.net.Advertiser;
 import org.apache.logging.log4j.core.util.Booleans;
 import org.apache.logging.log4j.core.util.Integers;
@@ -43,6 +41,80 @@ import org.apache.logging.log4j.core.util.Integers;
 @Plugin(name = "RandomAccessFile", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true)
 public final class RandomAccessFileAppender extends AbstractOutputStreamAppender<RandomAccessFileManager> {
 
+    /**
+     * Builds FileAppender instances.
+     * 
+     * @param <B>
+     *            This builder class
+     */
+    public static class Builder<B extends Builder<B>> extends AbstractOutputStreamAppender.Builder<B>
+            implements org.apache.logging.log4j.core.util.Builder<RandomAccessFileAppender> {
+
+        @PluginBuilderAttribute("fileName")
+        private String fileName;
+
+        @PluginBuilderAttribute("append")
+        private boolean append;
+
+        @PluginBuilderAttribute("advertise")
+        private boolean advertise;
+
+        @PluginBuilderAttribute("advertiseURI")
+        private String advertiseURI;
+
+        @PluginConfiguration
+        private Configuration configuration;
+
+        @Override
+        public RandomAccessFileAppender build() {
+            final String name = getName();
+            if (name == null) {
+                LOGGER.error("No name provided for FileAppender");
+                return null;
+            }
+
+            if (fileName == null) {
+                LOGGER.error("No filename provided for FileAppender with name " + name);
+                return null;
+            }
+            final Layout<? extends Serializable> layout = getOrCreateLayout();
+            final boolean immediateFlush = isImmediateFlush();
+            final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(fileName, append,
+                    immediateFlush, getBufferSize(), advertiseURI, layout, null);
+            if (manager == null) {
+                return null;
+            }
+
+            return new RandomAccessFileAppender(name, layout, getFilter(), manager, fileName, isIgnoreExceptions(),
+                    immediateFlush, advertise ? configuration.getAdvertiser() : null);
+        }
+
+        public B withFileName(String fileName) {
+            this.fileName = fileName;
+            return asBuilder();
+        }
+
+        public B withAppend(boolean append) {
+            this.append = append;
+            return asBuilder();
+        }
+
+        public B withAdvertise(boolean advertise) {
+            this.advertise = advertise;
+            return asBuilder();
+        }
+
+        public B withAdvertiseURI(String advertiseURI) {
+            this.advertiseURI = advertiseURI;
+            return asBuilder();
+        }
+
+        public B withConfiguration(Configuration configuration) {
+            this.configuration = configuration;
+            return asBuilder();
+        }
+    }
+    
     private final String fileName;
     private Object advertisement;
     private final Advertiser advertiser;
@@ -133,22 +205,23 @@ public final class RandomAccessFileAppender extends AbstractOutputStreamAppender
      *            advertised, "false" otherwise.
      * @param advertiseURI The advertised URI which can be used to retrieve the
      *            file contents.
-     * @param config The Configuration.
+     * @param configuration The Configuration.
      * @return The FileAppender.
+     * @deprecated Use {@link #newBuilder()}.
      */
-    @PluginFactory
+    @Deprecated
     public static RandomAccessFileAppender createAppender(
-            @PluginAttribute("fileName") final String fileName,
-            @PluginAttribute("append") final String append,
-            @PluginAttribute("name") final String name,
-            @PluginAttribute("immediateFlush") final String immediateFlush,
-            @PluginAttribute("bufferSize") final String bufferSizeStr,
-            @PluginAttribute("ignoreExceptions") final String ignore,
-            @PluginElement("Layout") Layout<? extends Serializable> layout,
-            @PluginElement("Filter") final Filter filter,
-            @PluginAttribute("advertise") final String advertise,
-            @PluginAttribute("advertiseURI") final String advertiseURI,
-            @PluginConfiguration final Configuration config) {
+            final String fileName,
+            final String append,
+            final String name,
+            final String immediateFlush,
+            final String bufferSizeStr,
+            final String ignore,
+            final Layout<? extends Serializable> layout,
+            final Filter filter,
+            final String advertise,
+            final String advertiseURI,
+            final Configuration configuration) {
 
         final boolean isAppend = Booleans.parseBoolean(append, true);
         final boolean isFlush = Booleans.parseBoolean(immediateFlush, true);
@@ -156,25 +229,24 @@ public final class RandomAccessFileAppender extends AbstractOutputStreamAppender
         final boolean isAdvertise = Boolean.parseBoolean(advertise);
         final int bufferSize = Integers.parseInt(bufferSizeStr, RandomAccessFileManager.DEFAULT_BUFFER_SIZE);
 
-        if (name == null) {
-            LOGGER.error("No name provided for FileAppender");
-            return null;
-        }
-
-        if (fileName == null) {
-            LOGGER.error("No filename provided for FileAppender with name " + name);
-            return null;
-        }
-        if (layout == null) {
-            layout = PatternLayout.createDefaultLayout();
-        }
-        final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(fileName, isAppend, isFlush,
-                bufferSize, advertiseURI, layout, null);
-        if (manager == null) {
-            return null;
-        }
-
-        return new RandomAccessFileAppender(name, layout, filter, manager, fileName, ignoreExceptions, isFlush,
-                isAdvertise ? config.getAdvertiser() : null);
+        return newBuilder()
+            .withAdvertise(isAdvertise)
+            .withAdvertiseURI(advertiseURI)
+            .withAppend(isAppend)
+            .withBufferSize(bufferSize)
+            .withConfiguration(configuration)
+            .withFileName(fileName)
+            .withFilter(filter)
+            .withIgnoreExceptions(ignoreExceptions)
+            .withImmediateFlush(isFlush)
+            .withLayout(layout)
+            .withName(name)
+            .build();
     }
+    
+    @PluginBuilderFactory
+    public static <B extends Builder<B>> B newBuilder() {
+        return new Builder<B>().asBuilder();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ef2ab0df/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1bb9464..38da035 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -129,6 +129,9 @@
       <action issue="LOG4J2-1697" dev="ggregory" type="add">
         Add a SerializerBuilder to PatternLayout and deprecate PatternLayout.createSerializer().
       </action>
+      <action issue="LOG4J2-1701" dev="ggregory" type="add">
+        Add a Builder to RandomAccessFileAppender and deprecate RandomAccessFileAppender.createAppender().
+      </action>
     </release>
     <release version="2.7" date="2016-10-02" description="GA Release 2.7">
       <action issue="LOG4J2-1618" dev="rpopma" type="fix" due-to="Raman Gupta">