You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/09/14 07:25:56 UTC

git commit: Add builder class for ConsoleAppender.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 5533cae78 -> 237ec9929


Add builder class for ConsoleAppender.


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

Branch: refs/heads/master
Commit: 237ec992946139bcbcc298eee1f68494b078fa86
Parents: 5533cae
Author: Matt Sicker <ma...@apache.org>
Authored: Sun Sep 14 00:25:30 2014 -0500
Committer: Matt Sicker <ma...@apache.org>
Committed: Sun Sep 14 00:25:30 2014 -0500

----------------------------------------------------------------------
 .../log4j/core/appender/ConsoleAppender.java    | 74 +++++++++++++++++++-
 .../core/config/AbstractConfiguration.java      |  3 +-
 .../log4j/core/config/DefaultConfiguration.java |  3 +-
 .../core/appender/ConsoleAppenderTest.java      |  8 +--
 .../net/server/AbstractSocketServerTest.java    |  3 +-
 5 files changed, 79 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/237ec992/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index 6522510..54d837e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -28,8 +28,10 @@ import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.Layout;
 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.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.config.plugins.validation.constraints.RequiresNonNull;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.util.Booleans;
 import org.apache.logging.log4j.core.util.Loader;
@@ -79,7 +81,6 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
      *               they are propagated to the caller.
      * @return The ConsoleAppender.
      */
-    @PluginFactory
     public static ConsoleAppender createAppender(
             @PluginElement("Layout") Layout<? extends Serializable> layout,
             @PluginElement("Filter") final Filter filter,
@@ -100,6 +101,75 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
         return new ConsoleAppender(name, layout, filter, getManager(isFollow, target, layout), ignoreExceptions);
     }
 
+    public static ConsoleAppender createDefaultAppenderForLayout(final Layout<? extends Serializable> layout) {
+        // this method cannot use the builder class without introducing an infinite loop due to DefaultConfiguration
+        return new ConsoleAppender("Console", layout, null, getManager(false, Target.SYSTEM_OUT, layout), true);
+    }
+
+    @PluginBuilderFactory
+    public static Builder newBuilder() {
+        return new Builder();
+    }
+
+    public static class Builder implements org.apache.logging.log4j.core.util.Builder<ConsoleAppender> {
+
+        @PluginElement("Layout")
+        @RequiresNonNull
+        private Layout<? extends Serializable> layout = PatternLayout.createDefaultLayout();
+
+        @PluginElement("Filter")
+        private Filter filter;
+
+        @PluginBuilderAttribute
+        @RequiresNonNull
+        private Target target = Target.SYSTEM_OUT;
+
+        @PluginBuilderAttribute
+        @RequiresNonNull
+        private String name;
+
+        @PluginBuilderAttribute
+        private boolean follow = false;
+
+        @PluginBuilderAttribute
+        private boolean ignoreExceptions = true;
+
+        public Builder setLayout(final Layout<? extends Serializable> layout) {
+            this.layout = layout;
+            return this;
+        }
+
+        public Builder setFilter(final Filter filter) {
+            this.filter = filter;
+            return this;
+        }
+
+        public Builder setTarget(final Target target) {
+            this.target = target;
+            return this;
+        }
+
+        public Builder setName(final String name) {
+            this.name = name;
+            return this;
+        }
+
+        public Builder setFollow(final boolean follow) {
+            this.follow = follow;
+            return this;
+        }
+
+        public Builder setIgnoreExceptions(final boolean ignoreExceptions) {
+            this.ignoreExceptions = ignoreExceptions;
+            return this;
+        }
+
+        @Override
+        public ConsoleAppender build() {
+            return new ConsoleAppender(name, layout, filter, getManager(follow, target, layout), ignoreExceptions);
+        }
+    }
+
     private static OutputStreamManager getManager(final boolean follow, final Target target, final Layout<? extends Serializable> layout) {
         final String type = target.name();
         final OutputStream os = getOutputStream(follow, target);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/237ec992/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
index 6e9ed34..3c4dcca 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
@@ -403,8 +403,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
             .withPattern(DefaultConfiguration.DEFAULT_PATTERN)
             .withConfiguration(this)
             .build();
-        final Appender appender = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "false",
-            "true");
+        final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
         appender.start();
         addAppender(appender);
         final LoggerConfig root = getRootLogger();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/237ec992/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
index a7d4116..d0b17ee 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
@@ -59,8 +59,7 @@ public class DefaultConfiguration extends AbstractConfiguration {
             .withPattern(DEFAULT_PATTERN)
             .withConfiguration(this)
             .build();
-        final Appender appender =
-                ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "false", "true");
+        final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
         appender.start();
         addAppender(appender);
         final LoggerConfig root = getRootLogger();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/237ec992/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index d0bea86..78213d1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -20,10 +20,8 @@ import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.junit.AfterClass;
@@ -52,8 +50,10 @@ public class ConsoleAppenderTest {
     @Test
     public void testFollow() {
         final PrintStream ps = System.out;
-        final Layout<String> layout = PatternLayout.createDefaultLayout();
-        final ConsoleAppender app = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "true", "false");
+        final ConsoleAppender app = ConsoleAppender.newBuilder()
+            .setFollow(true)
+            .setIgnoreExceptions(false)
+            .build();
         app.start();
         final LogEvent event = new Log4jLogEvent("TestLogger", null, ConsoleAppenderTest.class.getName(), Level.INFO,
             new SimpleMessage("Test"), null);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/237ec992/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
index 6f62008..680ac37 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/server/AbstractSocketServerTest.java
@@ -176,8 +176,7 @@ public abstract class AbstractSocketServerTest {
         final ListAppender listAppender = new ListAppender("Events", serverFilter, null, false, false);
         listAppender.start();
         final PatternLayout layout = PatternLayout.newBuilder().withPattern("%m %ex%n").build();
-        final ConsoleAppender console = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "false",
-                "true");
+        final ConsoleAppender console = ConsoleAppender.createDefaultAppenderForLayout(layout);
         final Logger serverLogger = ctx.getLogger(this.getClass().getName());
         serverLogger.addAppender(console);
         serverLogger.setAdditive(false);