Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J-1181 6e858b02f -> 5f9ad0e61


Example ConfigurationBuilder that constructs a RollingFileAppender


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

Branch: refs/heads/LOG4J-1181
Commit: 419a7b2dcf1d65a8e0732d1807f420b36556bf63
Parents: 6e858b0
Author: Ralph Goers <[email protected]>
Authored: Sat Jan 23 20:01:23 2016 -0700
Committer: Ralph Goers <[email protected]>
Committed: Sat Jan 23 20:01:23 2016 -0700

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 20 ++++++---
 .../log4j/core/config/TestConfigurator.java     | 45 ++++++++++++++++++-
 src/site/xdoc/manual/customconfig.xml           | 46 +++++++++++++++++---
 3 files changed, 98 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/419a7b2d/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 c9769e0..ffabe03 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
@@ -343,7 +343,7 @@ public abstract class AbstractConfiguration extends 
AbstractFilterable implement
     }
 
     private List<Appender> getAsyncAppenders(final Appender[] all) {
-        final List<Appender> result = new ArrayList<Appender>();
+        final List<Appender> result = new ArrayList<>();
         for (int i = all.length - 1; i >= 0; --i) {
             if (all[i] instanceof AsyncAppender) {
                 result.add(all[i]);
@@ -415,12 +415,20 @@ public abstract class AbstractConfiguration extends 
AbstractFilterable implement
     }
 
     protected void preConfigure(Node node) {
-        for (final Node child : node.getChildren()) {
-            Class<?> clazz = child.getType().getPluginClass();
-            if (clazz.isAnnotationPresent(Scheduled.class)) {
-                configurationScheduler.incrementScheduledItems();
+        try {
+            for (final Node child : node.getChildren()) {
+                if (child.getType() == null) {
+                    LOGGER.error("Unable to locate plugin type for " + 
child.getName());
+                    continue;
+                }
+                Class<?> clazz = child.getType().getPluginClass();
+                if (clazz.isAnnotationPresent(Scheduled.class)) {
+                    configurationScheduler.incrementScheduledItems();
+                }
+                preConfigure(child);
             }
-            preConfigure(child);
+        } catch (Exception ex) {
+            LOGGER.error("Error capturing node data for node " + 
node.getName(), ex);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/419a7b2d/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
index 057deee..b5a22b1 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
@@ -32,8 +32,10 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import 
org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
+import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
 import 
org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
+import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
 import org.apache.logging.log4j.core.filter.CompositeFilter;
 import org.apache.logging.log4j.core.layout.PatternLayout;
@@ -90,7 +92,6 @@ public class TestConfigurator {
         }
     }
 
-
     @Test
     public void testFromFile() throws Exception {
         ctx = Configurator.initialize("Test1", 
"target/test-classes/log4j2-config.xml");
@@ -387,6 +388,48 @@ public class TestConfigurator {
     }
 
     @Test
+    public void testRolling() throws Exception {
+        ConfigurationBuilder< BuiltConfiguration > builder =
+                ConfigurationBuilderFactory.newConfigurationBuilder();
+
+        builder.setStatusLevel( Level.ERROR);
+        builder.setConfigurationName("RollingBuilder");
+        // create the console appender
+        AppenderComponentBuilder appenderBuilder = 
builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
+                ConsoleAppender.Target.SYSTEM_OUT);
+        appenderBuilder.add(builder.newLayout("PatternLayout").
+                addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
+        builder.add( appenderBuilder );
+
+        LayoutComponentBuilder layoutBuilder = 
builder.newLayout("PatternLayout")
+                .addAttribute("pattern", "%d [%t] %-5level: %msg%n");
+        ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
+                
.addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule",
 "0 0 0 * * ?"))
+                
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size",
 "100M"));
+        appenderBuilder = builder.newAppender("rolling", "RollingFile")
+                .addAttribute("fileName", "target/rolling.log")
+                .addAttribute("filePattern", 
"target/archive/rolling-%d{MM-dd-yy}.log.gz")
+                .add(layoutBuilder)
+                .addComponent(triggeringPolicy);
+        builder.add(appenderBuilder);
+
+        // create the new logger
+        builder.add( builder.newLogger( "TestLogger", Level.DEBUG )
+                .add( builder.newAppenderRef( "rolling" ) )
+                .addAttribute( "additivity", false ) );
+
+        builder.add( builder.newRootLogger( Level.DEBUG )
+                .add( builder.newAppenderRef( "rolling" ) ) );
+        Configuration config = builder.build();
+        assertNotNull("No rolling file appender", 
config.getAppender("rolling"));
+        assertEquals("Unexpected Configuration", "RollingBuilder", 
config.getName());
+        // Initialize the new configuration
+        LoggerContext ctx = Configurator.initialize( config );
+        Configurator.shutdown(ctx);
+
+    }
+
+    @Test
     public void testBuilderWithScripts() throws Exception {
         String script = "if (logEvent.getLoggerName().equals(\"NoLocation\")) 
{\n" +
                 "                return \"NoLocation\";\n" +

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/419a7b2d/src/site/xdoc/manual/customconfig.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/customconfig.xml 
b/src/site/xdoc/manual/customconfig.xml
index 485e93a..ed84279 100644
--- a/src/site/xdoc/manual/customconfig.xml
+++ b/src/site/xdoc/manual/customconfig.xml
@@ -164,16 +164,50 @@ builder.add(builder.newFilter("ThresholdFilter", 
Filter.Result.ACCEPT, Filter.Re
     .addAttribute("level", Level.DEBUG));
 AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", 
"CONSOLE").addAttribute("target",
     ConsoleAppender.Target.SYSTEM_OUT);
-appenderBuilder.add(builder.newLayout("PatternLayout").
-    addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
-appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, 
Filter.Result.NEUTRAL).
-    addAttribute("marker", "FLOW"));
+appenderBuilder.add(builder.newLayout("PatternLayout")
+    .addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
+appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, 
Filter.Result.NEUTRAL)
+    .addAttribute("marker", "FLOW"));
 builder.add(appenderBuilder);
-builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG).
-    add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
+builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG)
+    .add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
 
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
 ctx = Configurator.initialize(builder.build());
 ]]></pre>
+            <p>This example shows how to create a configuration that includes 
a RollingFileAppender.</p>
+            <pre class="prettyprint linenum"><![CDATA[
+ConfigurationBuilder< BuiltConfiguration > builder = 
ConfigurationBuilderFactory.newConfigurationBuilder();
+
+builder.setStatusLevel( Level.ERROR);
+builder.setConfigurationName("RollingBuilder");
+// create a console appender
+AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", 
"CONSOLE").addAttribute("target",
+    ConsoleAppender.Target.SYSTEM_OUT);
+appenderBuilder.add(builder.newLayout("PatternLayout")
+    .addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
+builder.add( appenderBuilder );
+// create a rolling file appender
+LayoutComponentBuilder layoutBuilder = builder.newLayout("PatternLayout")
+    .addAttribute("pattern", "%d [%t] %-5level: %msg%n");
+ComponentBuilder triggeringPolicy = builder.newComponent("Policies")
+    
.addComponent(builder.newComponent("CronTriggeringPolicy").addAttribute("schedule",
 "0 0 0 * * ?"))
+    
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy").addAttribute("size",
 "100M"));
+appenderBuilder = builder.newAppender("rolling", "RollingFile")
+    .addAttribute("fileName", "target/rolling.log")
+    .addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz")
+    .add(layoutBuilder)
+    .addComponent(triggeringPolicy);
+builder.add(appenderBuilder);
+
+// create the new logger
+builder.add( builder.newLogger( "TestLogger", Level.DEBUG )
+    .add( builder.newAppenderRef( "rolling" ) )
+    .addAttribute( "additivity", false ) );
+
+builder.add( builder.newRootLogger( Level.DEBUG )
+    .add( builder.newAppenderRef( "rolling" ) ) );
+LoggerContext ctx = Configurator.intitialize(builder.build());
+]]></pre>
         </subsection>
 
           <a name="Hybrid"/>

Reply via email to