Repository: logging-log4j2
Updated Branches:
  refs/heads/master 94034c08e -> 4f7816264


[LOG4J2-1704]

Add a Builder to RollingRandomAccessFileAppender and deprecate
RollingRandomAccessFileAppender.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/4f781626
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4f781626
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4f781626

Branch: refs/heads/master
Commit: 4f7816264c8776ed2c460e4c239b6502fe07d589
Parents: 94034c0
Author: Gary Gregory <[email protected]>
Authored: Sat Nov 12 02:42:33 2016 -0800
Committer: Gary Gregory <[email protected]>
Committed: Sat Nov 12 02:42:33 2016 -0800

----------------------------------------------------------------------
 .../RollingRandomAccessFileAppender.java        | 218 ++++++++++++++-----
 src/changes/changes.xml                         |   3 +
 2 files changed, 164 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4f781626/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 ea984e3..490893a 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
@@ -34,9 +34,10 @@ import 
org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
 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;
@@ -49,6 +50,126 @@ import org.apache.logging.log4j.core.util.Integers;
 @Plugin(name = "RollingRandomAccessFile", category = Core.CATEGORY_NAME, 
elementType = Appender.ELEMENT_TYPE, printObject = true)
 public final class RollingRandomAccessFileAppender extends 
AbstractOutputStreamAppender<RollingRandomAccessFileManager> {
 
+    public static class Builder<B extends Builder<B>> extends 
AbstractOutputStreamAppender.Builder<B>
+            implements 
org.apache.logging.log4j.core.util.Builder<RollingRandomAccessFileAppender> {
+
+        public Builder() {
+            super();
+            withBufferSize(RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE);
+            withIgnoreExceptions(true);
+            withImmediateFlush(true);
+        }
+
+        @PluginBuilderAttribute("fileName")
+        private String fileName;
+
+        @PluginBuilderAttribute("filePattern")
+        private String filePattern;
+
+        @PluginBuilderAttribute("append")
+        private boolean append = true;
+
+        @PluginElement("Policy")
+        private TriggeringPolicy policy;
+
+        @PluginElement("Strategy")
+        private RolloverStrategy strategy;
+
+        @PluginBuilderAttribute("advertise")
+        private boolean advertise;
+
+        @PluginBuilderAttribute("advertiseURI")
+        private String advertiseURI;
+
+        @PluginConfiguration
+        private Configuration configuration;
+
+        @Override
+        public RollingRandomAccessFileAppender build() {
+            final String name = getName();
+            if (name == null) {
+                LOGGER.error("No name provided for FileAppender");
+                return null;
+            }
+
+            if (fileName == null) {
+                LOGGER.error("No filename was provided for FileAppender with 
name " + name);
+                return null;
+            }
+
+            if (filePattern == null) {
+                LOGGER.error("No filename pattern provided for FileAppender 
with name " + name);
+                return null;
+            }
+
+            if (policy == null) {
+                LOGGER.error("A TriggeringPolicy must be provided");
+                return null;
+            }
+
+            if (strategy == null) {
+                strategy = DefaultRolloverStrategy.createStrategy(null, null, 
null,
+                        String.valueOf(Deflater.DEFAULT_COMPRESSION), null, 
true, configuration);
+            }
+
+            final Layout<? extends Serializable> layout = getOrCreateLayout();
+
+            final boolean immediateFlush = isImmediateFlush();
+            final int bufferSize = getBufferSize();
+            final RollingRandomAccessFileManager manager = 
RollingRandomAccessFileManager
+                    .getRollingRandomAccessFileManager(fileName, filePattern, 
append, immediateFlush, bufferSize, policy,
+                            strategy, advertiseURI, layout, configuration);
+            if (manager == null) {
+                return null;
+            }
+
+            manager.initialize();
+
+            return new RollingRandomAccessFileAppender(name, 
layout,getFilter(), manager, fileName, filePattern,
+                    isIgnoreExceptions(), immediateFlush, bufferSize, 
advertise ? configuration.getAdvertiser() : null);
+        }
+
+        public B withFileName(final String fileName) {
+            this.fileName = fileName;
+            return asBuilder();
+        }
+
+        public B withFilePattern(final String filePattern) {
+            this.filePattern = filePattern;
+            return asBuilder();
+        }
+
+        public B withAppend(final boolean append) {
+            this.append = append;
+            return asBuilder();
+        }
+
+        public B withPolicy(final TriggeringPolicy policy) {
+            this.policy = policy;
+            return asBuilder();
+        }
+
+        public B withStrategy(final RolloverStrategy strategy) {
+            this.strategy = strategy;
+            return asBuilder();
+        }
+
+        public B withAdvertise(final boolean advertise) {
+            this.advertise = advertise;
+            return asBuilder();
+        }
+
+        public B withAdvertiseURI(final String advertiseURI) {
+            this.advertiseURI = advertiseURI;
+            return asBuilder();
+        }
+
+        public B withConfiguration(final Configuration configuration) {
+            this.configuration = configuration;
+            return asBuilder();
+        }
+    }
+    
     private final String fileName;
     private final String filePattern;
     private final Object advertisement;
@@ -155,25 +276,26 @@ public final class RollingRandomAccessFileAppender 
extends AbstractOutputStreamA
      *            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 A RollingRandomAccessFileAppender.
+     * @deprecated Use {@link #newBuilder()}.
      */
-    @PluginFactory
+    @Deprecated
     public static RollingRandomAccessFileAppender createAppender(
-            @PluginAttribute("fileName") final String fileName,
-            @PluginAttribute("filePattern") final String filePattern,
-            @PluginAttribute("append") final String append,
-            @PluginAttribute("name") final String name,
-            @PluginAttribute("immediateFlush") final String immediateFlush,
-            @PluginAttribute("bufferSize") final String bufferSizeStr,
-            @PluginElement("Policy") final TriggeringPolicy policy,
-            @PluginElement("Strategy") RolloverStrategy strategy,
-            @PluginElement("Layout") Layout<? extends Serializable> layout,
-            @PluginElement("Filter") final Filter filter,
-            @PluginAttribute("ignoreExceptions") final String ignore,
-            @PluginAttribute("advertise") final String advertise,
-            @PluginAttribute("advertiseURI") final String advertiseURI,
-            @PluginConfiguration final Configuration config) {
+            final String fileName,
+            final String filePattern,
+            final String append,
+            final String name,
+            final String immediateFlush,
+            final String bufferSizeStr,
+            final TriggeringPolicy policy,
+            RolloverStrategy strategy,
+            Layout<? extends Serializable> layout,
+            final Filter filter,
+            final String ignore,
+            final String advertise,
+            final String advertiseURI,
+            final Configuration configuration) {
 
         final boolean isAppend = Booleans.parseBoolean(append, true);
         final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
@@ -181,45 +303,27 @@ public final class RollingRandomAccessFileAppender 
extends AbstractOutputStreamA
         final boolean isAdvertise = Boolean.parseBoolean(advertise);
         final int bufferSize = Integers.parseInt(bufferSizeStr, 
RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE);
 
-        if (name == null) {
-            LOGGER.error("No name provided for FileAppender");
-            return null;
-        }
-
-        if (fileName == null) {
-            LOGGER.error("No filename was provided for FileAppender with name 
" + name);
-            return null;
-        }
-
-        if (filePattern == null) {
-            LOGGER.error("No filename pattern provided for FileAppender with 
name " + name);
-            return null;
-        }
-
-        if (policy == null) {
-            LOGGER.error("A TriggeringPolicy must be provided");
-            return null;
-        }
-
-        if (strategy == null) {
-            strategy = DefaultRolloverStrategy.createStrategy(null, null, null,
-                    String.valueOf(Deflater.DEFAULT_COMPRESSION), null, true, 
config);
-        }
-
-        if (layout == null) {
-            layout = PatternLayout.createDefaultLayout();
-        }
-
-        final RollingRandomAccessFileManager manager = 
RollingRandomAccessFileManager.getRollingRandomAccessFileManager(
-                fileName, filePattern, isAppend, isFlush, bufferSize, policy, 
strategy, advertiseURI, layout, config);
-        if (manager == null) {
-            return null;
-        }
-
-        manager.initialize();
-
-        return new RollingRandomAccessFileAppender(name, layout, filter, 
manager,
-                fileName, filePattern, ignoreExceptions, isFlush, bufferSize,
-                isAdvertise ? config.getAdvertiser() : null);
+        return newBuilder()
+           .withAdvertise(isAdvertise)
+           .withAdvertiseURI(advertiseURI)
+           .withAppend(isAppend)
+           .withBufferSize(bufferSize)
+           .withConfiguration(configuration)
+           .withFileName(fileName)
+           .withFilePattern(filePattern)
+           .withFilter(filter)
+           .withIgnoreExceptions(ignoreExceptions)
+           .withImmediateFlush(isFlush)
+           .withLayout(layout)
+           .withName(name)
+           .withPolicy(policy)
+           .withStrategy(strategy)
+           .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/4f781626/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 356785b..0fc7d75 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -135,6 +135,9 @@
       <action issue="LOG4J2-1703" dev="ggregory" type="add">
         Add a Builder to MemoryMappedFileAppender and deprecate 
MemoryMappedFileAppender.createAppender().
       </action>      
+      <action issue="LOG4J2-1704" dev="ggregory" type="add">
+        Add a Builder to RollingRandomAccessFileAppender and deprecate 
RollingRandomAccessFileAppender.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">

Reply via email to