You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/08/30 09:33:28 UTC

[01/26] logging-log4j2 git commit: LOG4J2-1528 Serialize configuration into a log4j2.xml file

Repository: logging-log4j2
Updated Branches:
  refs/heads/master ef321c140 -> eb82f77c0


LOG4J2-1528 Serialize configuration into a log4j2.xml file


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

Branch: refs/heads/master
Commit: 446fb87af4ccaab777280730fde921948eb4425f
Parents: 0728abc
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Wed Aug 17 22:20:44 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Wed Aug 17 22:20:44 2016 +0200

----------------------------------------------------------------------
 .../builder/api/ConfigurationBuilder.java       |  17 +++
 .../impl/DefaultConfigurationBuilder.java       | 113 +++++++++++++++++++
 2 files changed, 130 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/446fb87a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
index 1fbfa01..2e7ef96 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
@@ -22,6 +22,9 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.util.Builder;
 
+import java.io.IOException;
+import java.io.OutputStream;
+
 /**
  * Interface for building logging configurations.
  * @param <T> The Configuration type created by this builder.
@@ -405,4 +408,18 @@ public interface ConfigurationBuilder<T extends Configuration> extends Builder<T
      * @return The constructed Configuration.
      */
     T build(boolean initialize);
+
+    /**
+     * Write an XML configuration file from this builder.
+     *
+     * @param output  OutputStream to write to, will not be closed
+     */
+    void writeXmlConfigurationFile(OutputStream output) throws IOException;
+
+    /**
+     * Write an XML configuration from this builder.
+     *
+     * @return  XML configuration
+     */
+    String writeXmlConfiguration();
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/446fb87a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 38b4fdb..6666486 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -16,8 +16,12 @@
  */
 package org.apache.logging.log4j.core.config.builder.impl;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
 import java.lang.reflect.Constructor;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
@@ -38,6 +42,10 @@ import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuild
 import org.apache.logging.log4j.core.config.builder.api.ScriptComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ScriptFileComponentBuilder;
 
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
 /**
  * @param <T> The BuiltConfiguration type.
  * @since 2.4
@@ -188,6 +196,111 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
+    public void writeXmlConfigurationFile(OutputStream output) throws IOException {
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
+            writeConfigurationXml(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            if (e.getNestedException() instanceof IOException) {
+                throw (IOException)e.getNestedException();
+            } else {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    @Override
+    public String writeXmlConfiguration() {
+        StringWriter sw = new StringWriter();
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
+            writeConfigurationXml(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            throw new RuntimeException(e);
+        }
+        return sw.toString();
+    }
+
+    private void writeConfigurationXml(XMLStreamWriter xmlWriter) throws XMLStreamException {
+        xmlWriter.writeStartDocument();
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        xmlWriter.writeStartElement("Configuration");
+        if (name != null) {
+            xmlWriter.writeAttribute("name", name);
+        }
+        if (level != null) {
+            xmlWriter.writeAttribute("status", level.name());
+        }
+        if (verbosity != null) {
+            xmlWriter.writeAttribute("verbose", verbosity);
+        }
+        if (destination != null) {
+            xmlWriter.writeAttribute("dest", destination);
+        }
+        if (packages != null) {
+            xmlWriter.writeAttribute("packages", packages);
+        }
+        if (shutdownFlag != null) {
+            xmlWriter.writeAttribute("shutdownHook", shutdownFlag);
+        }
+        if (advertiser != null) {
+            xmlWriter.writeAttribute("advertiser", advertiser);
+        }
+        if (monitorInterval > 0) {
+            xmlWriter.writeAttribute("monitorInterval", String.valueOf(monitorInterval));
+        }
+
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        for (Component component : root.getComponents()) {
+            if (!component.getAttributes().isEmpty() || !component.getComponents().isEmpty() || component.getValue() != null) {
+                writeComponentXml(xmlWriter, component, 1);
+            }
+        }
+
+        xmlWriter.writeEndElement(); // "Configuration"
+
+        xmlWriter.writeEndDocument();
+    }
+
+    private void writeComponentXml(XMLStreamWriter xmlWriter, Component component, int nesting) throws XMLStreamException {
+        if (!component.getComponents().isEmpty() || component.getValue() != null) {
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeStartElement(component.getPluginType());
+            writeAttributesXml(xmlWriter, component);
+            xmlWriter.writeCharacters(System.lineSeparator());
+            for (Component subComponent : component.getComponents()) {
+                writeComponentXml(xmlWriter, subComponent, nesting + 1);
+            }
+            if (component.getValue() != null) {
+                xmlWriter.writeCharacters(component.getValue());
+            }
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeEndElement();
+        } else {
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeEmptyElement(component.getPluginType());
+            writeAttributesXml(xmlWriter, component);
+        }
+        xmlWriter.writeCharacters(System.lineSeparator());
+    }
+
+    private void indentXml(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
+        for (int i = 0; i < nesting; i++) {
+            xmlWriter.writeCharacters("\t");
+        }
+    }
+
+    private void writeAttributesXml(XMLStreamWriter xmlWriter, Component component) throws XMLStreamException {
+        for (Map.Entry<String, String> attribute : component.getAttributes().entrySet()) {
+            xmlWriter.writeAttribute(attribute.getKey(), attribute.getValue());
+        }
+    }
+
+    @Override
     public ScriptComponentBuilder newScript(final String name, final String language, final String text) {
         return new DefaultScriptComponentBuilder(this, name, language, text);
     }


[12/26] logging-log4j2 git commit: Avoid depending on commons-lang

Posted by mi...@apache.org.
Avoid depending on commons-lang


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

Branch: refs/heads/master
Commit: 5f361e01213b97d5cd0014ca5ab926bb5a270f32
Parents: 871a097
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 17:02:02 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 17:02:02 2016 +0200

----------------------------------------------------------------------
 log4j-1.2-api/pom.xml                                            | 4 ----
 .../src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java   | 4 ++--
 .../java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java | 4 ++--
 3 files changed, 4 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5f361e01/log4j-1.2-api/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/pom.xml b/log4j-1.2-api/pom.xml
index 76b1937..779f050 100644
--- a/log4j-1.2-api/pom.xml
+++ b/log4j-1.2-api/pom.xml
@@ -54,10 +54,6 @@
       <artifactId>log4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
       <type>test-jar</type>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5f361e01/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
index 8f9df10..1df66d5 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1XmlLayout.java
@@ -16,7 +16,6 @@
  */
 package org.apache.log4j.layout;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Node;
@@ -26,6 +25,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout;
 import org.apache.logging.log4j.core.layout.ByteBufferDestination;
 import org.apache.logging.log4j.core.util.Transform;
+import org.apache.logging.log4j.util.Strings;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
@@ -102,7 +102,7 @@ public final class Log4j1XmlLayout extends AbstractStringLayout {
         List<String> ndc = event.getContextStack().asList();
         if (!ndc.isEmpty()) {
             buf.append("<log4j:NDC><![CDATA[");
-            Transform.appendEscapingCData(buf, StringUtils.join(ndc, ' '));
+            Transform.appendEscapingCData(buf, Strings.join(ndc, ' '));
             buf.append("]]></log4j:NDC>\r\n");
         }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5f361e01/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java
----------------------------------------------------------------------
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java
index d3f16f5..1eb38be 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/pattern/Log4j1NdcPatternConverter.java
@@ -16,12 +16,12 @@
  */
 package org.apache.log4j.pattern;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.pattern.ConverterKeys;
 import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
 import org.apache.logging.log4j.core.pattern.PatternConverter;
+import org.apache.logging.log4j.util.Strings;
 
 import java.util.List;
 
@@ -58,6 +58,6 @@ public final class Log4j1NdcPatternConverter extends LogEventPatternConverter {
     @Override
     public void format(final LogEvent event, final StringBuilder toAppendTo) {
         List<String> ndc = event.getContextStack().asList();
-        toAppendTo.append(StringUtils.join(ndc, ' '));
+        toAppendTo.append(Strings.join(ndc, ' '));
     }
 }


[02/26] logging-log4j2 git commit: LOG4J2-1528 Serialize configuration into a log4j2.xml file

Posted by mi...@apache.org.
LOG4J2-1528 Serialize configuration into a log4j2.xml file


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

Branch: refs/heads/master
Commit: ac80524cb381339d38b59f692f5bb2916e56a2c2
Parents: 0728abc
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Wed Aug 17 22:20:44 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Wed Aug 17 22:22:41 2016 +0200

----------------------------------------------------------------------
 .../builder/api/ConfigurationBuilder.java       |  17 +++
 .../impl/DefaultConfigurationBuilder.java       | 113 +++++++++++++++++++
 2 files changed, 130 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ac80524c/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
index 1fbfa01..2e7ef96 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
@@ -22,6 +22,9 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.util.Builder;
 
+import java.io.IOException;
+import java.io.OutputStream;
+
 /**
  * Interface for building logging configurations.
  * @param <T> The Configuration type created by this builder.
@@ -405,4 +408,18 @@ public interface ConfigurationBuilder<T extends Configuration> extends Builder<T
      * @return The constructed Configuration.
      */
     T build(boolean initialize);
+
+    /**
+     * Write an XML configuration file from this builder.
+     *
+     * @param output  OutputStream to write to, will not be closed
+     */
+    void writeXmlConfigurationFile(OutputStream output) throws IOException;
+
+    /**
+     * Write an XML configuration from this builder.
+     *
+     * @return  XML configuration
+     */
+    String writeXmlConfiguration();
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ac80524c/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 38b4fdb..6834956 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -16,8 +16,12 @@
  */
 package org.apache.logging.log4j.core.config.builder.impl;
 
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
 import java.lang.reflect.Constructor;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
@@ -38,6 +42,10 @@ import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuild
 import org.apache.logging.log4j.core.config.builder.api.ScriptComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ScriptFileComponentBuilder;
 
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
 /**
  * @param <T> The BuiltConfiguration type.
  * @since 2.4
@@ -188,6 +196,111 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
+    public void writeXmlConfigurationFile(final OutputStream output) throws IOException {
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
+            writeConfigurationXml(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            if (e.getNestedException() instanceof IOException) {
+                throw (IOException)e.getNestedException();
+            } else {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    @Override
+    public String writeXmlConfiguration() {
+        StringWriter sw = new StringWriter();
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
+            writeConfigurationXml(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            throw new RuntimeException(e);
+        }
+        return sw.toString();
+    }
+
+    private void writeConfigurationXml(XMLStreamWriter xmlWriter) throws XMLStreamException {
+        xmlWriter.writeStartDocument();
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        xmlWriter.writeStartElement("Configuration");
+        if (name != null) {
+            xmlWriter.writeAttribute("name", name);
+        }
+        if (level != null) {
+            xmlWriter.writeAttribute("status", level.name());
+        }
+        if (verbosity != null) {
+            xmlWriter.writeAttribute("verbose", verbosity);
+        }
+        if (destination != null) {
+            xmlWriter.writeAttribute("dest", destination);
+        }
+        if (packages != null) {
+            xmlWriter.writeAttribute("packages", packages);
+        }
+        if (shutdownFlag != null) {
+            xmlWriter.writeAttribute("shutdownHook", shutdownFlag);
+        }
+        if (advertiser != null) {
+            xmlWriter.writeAttribute("advertiser", advertiser);
+        }
+        if (monitorInterval > 0) {
+            xmlWriter.writeAttribute("monitorInterval", String.valueOf(monitorInterval));
+        }
+
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        for (Component component : root.getComponents()) {
+            if (!component.getAttributes().isEmpty() || !component.getComponents().isEmpty() || component.getValue() != null) {
+                writeComponentXml(xmlWriter, component, 1);
+            }
+        }
+
+        xmlWriter.writeEndElement(); // "Configuration"
+
+        xmlWriter.writeEndDocument();
+    }
+
+    private void writeComponentXml(XMLStreamWriter xmlWriter, Component component, int nesting) throws XMLStreamException {
+        if (!component.getComponents().isEmpty() || component.getValue() != null) {
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeStartElement(component.getPluginType());
+            writeAttributesXml(xmlWriter, component);
+            xmlWriter.writeCharacters(System.lineSeparator());
+            for (Component subComponent : component.getComponents()) {
+                writeComponentXml(xmlWriter, subComponent, nesting + 1);
+            }
+            if (component.getValue() != null) {
+                xmlWriter.writeCharacters(component.getValue());
+            }
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeEndElement();
+        } else {
+            indentXml(xmlWriter, nesting);
+            xmlWriter.writeEmptyElement(component.getPluginType());
+            writeAttributesXml(xmlWriter, component);
+        }
+        xmlWriter.writeCharacters(System.lineSeparator());
+    }
+
+    private void indentXml(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
+        for (int i = 0; i < nesting; i++) {
+            xmlWriter.writeCharacters("\t");
+        }
+    }
+
+    private void writeAttributesXml(XMLStreamWriter xmlWriter, Component component) throws XMLStreamException {
+        for (Map.Entry<String, String> attribute : component.getAttributes().entrySet()) {
+            xmlWriter.writeAttribute(attribute.getKey(), attribute.getValue());
+        }
+    }
+
+    @Override
     public ScriptComponentBuilder newScript(final String name, final String language, final String text) {
         return new DefaultScriptComponentBuilder(this, name, language, text);
     }


[26/26] logging-log4j2 git commit: Fix changes.xml

Posted by mi...@apache.org.
Fix changes.xml


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

Branch: refs/heads/master
Commit: eb82f77c01d438c330c6997c99ca9ffb9228d4f5
Parents: 45a7da2
Author: Mikael St�ldal <mi...@magine.com>
Authored: Tue Aug 30 11:31:02 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Tue Aug 30 11:31:02 2016 +0200

----------------------------------------------------------------------
 src/changes/changes.xml | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/eb82f77c/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0842ec5..58a7a08 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -27,12 +27,6 @@
       <action issue="LOG4J2-1528" dev="mikes" type="add">
         Create XML configuration file from ConfigurationBuilder.
       </action>
-      <action issue="LOG4J2-1181" dev="mikes" type="add">
-        Scala API.
-      </action>
-      <action issue="LOG4J2-1512" dev="mikes" type="add">
-        Options to exclude stack trace from JSON, XML and YAML layouts.
-      </action>
       <action issue="LOG4J2-1511" dev="ggregory" type="fix" due-to="Srikanth Surukuntu">
         DynamicThresholdFilter filters incorrectly when params are passed as individual arguments instead of varargs.
       </action>
@@ -105,6 +99,18 @@
       <action issue="LOG4J2-1313" dev="rpopma" type="fix" due-to="Philipp Knobel">
         Properties declared in configuration can now have their value either in the element body or in an attribute named "value".
       </action>
+      <action issue="LOG4J2-1235" dev="ggregory" type="fix" due-to="Niranjan Rao, Sascha Scholz, Aleksey Zvolinsky">
+        org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy not working correctly.
+      </action>
+      <action issue="LOG4J2-1502" dev="ggregory" type="fix" due-to="Sumit Singhal">
+        CsvParameterLayout and CsvLogEventLayout insert NUL characters if data starts with {, (, [ or "
+      </action>
+      <action issue="LOG4J2-1181" dev="mikes" type="add">
+        Scala API.
+      </action>
+      <action issue="LOG4J2-1512" dev="mikes" type="add">
+        Options to exclude stack trace from JSON, XML and YAML layouts.
+      </action>
       <action issue="LOG4J2-1539" dev="ggregory" type="add" due-to="Gary Gregory">
         Add Core API Configurator.shutdown(LoggerContext, long, TimeUnit).
       </action>


[14/26] logging-log4j2 git commit: Add test and TODO for includeLocation on loggers

Posted by mi...@apache.org.
Add test and TODO for includeLocation on loggers


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

Branch: refs/heads/master
Commit: 634df7cc1adddd9b38ff73508a83802c83922083
Parents: e0f5ec4
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 17:40:44 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 17:40:44 2016 +0200

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      |  2 +-
 .../impl/DefaultConfigurationBuilder.java       |  2 +-
 .../builder/ConfigurationBuilderTest.java       | 39 +++++++++++++++-----
 3 files changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/634df7cc/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 d89b8f5..b098334 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
@@ -265,7 +265,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
 
         writeXmlSection(xmlWriter, lookupSection("Appenders"));
-        writeXmlSection(xmlWriter, lookupSection("Loggers"));
+        writeXmlSection(xmlWriter, lookupSection("Loggers"));        // TODO includeLocation on loggers
 
         xmlWriter.writeEndElement(); // "Configuration"
         xmlWriter.writeCharacters(System.lineSeparator());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/634df7cc/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index e3de1ae..849a9f4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -264,7 +264,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
             writeXmlSection(xmlWriter, filters);
         }
         writeXmlSection(xmlWriter, appenders);
-        writeXmlSection(xmlWriter, loggers);
+        writeXmlSection(xmlWriter, loggers);        // TODO includeLocation on loggers
 
         xmlWriter.writeEndElement(); // "Configuration"
         xmlWriter.writeCharacters(System.lineSeparator());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/634df7cc/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index 951038f..15b9599 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -16,8 +16,11 @@
  */
 package org.apache.logging.log4j.core.config.builder;
 
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.config.AbstractConfiguration;
+import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
 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.impl.BuiltConfiguration;
@@ -27,6 +30,28 @@ import static org.junit.Assert.assertEquals;
 
 public class ConfigurationBuilderTest {
 
+    private void addTestFixtures(final String name, final ConfigurationBuilder<BuiltConfiguration> builder) {
+        builder.setConfigurationName(name);
+        builder.setStatusLevel(Level.ERROR);
+        builder.add(builder.newScriptFile("target/test-classes/scripts/filter.groovy").addIsWatched(true));
+        builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
+                .addAttribute("level", Level.DEBUG));
+        final 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"));
+        builder.add(appenderBuilder);
+        builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG).
+                    add(builder.newAppenderRef("Stdout")).
+                    addAttribute("additivity", false).
+                    addAttribute("includeLocation", true));
+        builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
+        builder.addProperty("MyKey", "MyValue");
+        builder.add(builder.newCustomLevel("Panic", 17));
+        builder.setPackages("foo,bar");
+    }
+
     private final static String expectedXml1 =
             "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
             "<Configuration name=\"config name\" status=\"ERROR\" packages=\"foo,bar\">" + System.lineSeparator() +
@@ -50,7 +75,7 @@ public class ConfigurationBuilderTest {
             "\t\t<Logger additivity=\"false\" level=\"DEBUG\" includeLocation=\"true\" name=\"org.apache.logging.log4j\">" + System.lineSeparator() +
             "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
             "\t\t</Logger>" + System.lineSeparator() +
-            "\t\t<Root level=\"ERROR\" includeLocation=\"true\">" + System.lineSeparator() +
+            "\t\t<Root level=\"ERROR\">" + System.lineSeparator() +
             "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
             "\t\t</Root>" + System.lineSeparator() +
             "\t</Loggers>" + System.lineSeparator() +
@@ -59,10 +84,7 @@ public class ConfigurationBuilderTest {
     @Test
     public void testXmlConstructing() throws Exception {
         final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
-        CustomConfigurationFactory.addTestFixtures("config name", builder);
-        builder.addProperty("MyKey", "MyValue");
-        builder.add(builder.newCustomLevel("Panic", 17));
-        builder.setPackages("foo,bar");
+        addTestFixtures("config name", builder);
         final String xmlConfiguration = builder.toXmlConfiguration();
         assertEquals(expectedXml1, xmlConfiguration);
     }
@@ -90,7 +112,7 @@ public class ConfigurationBuilderTest {
             "\t\t<Logger name=\"org.apache.logging.log4j\" additivity=\"false\" level=\"DEBUG\" includeLocation=\"true\">" + System.lineSeparator() +
             "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
             "\t\t</Logger>" + System.lineSeparator() +
-            "\t\t<Root level=\"ERROR\" includeLocation=\"true\">" + System.lineSeparator() +
+            "\t\t<Root level=\"ERROR\">" + System.lineSeparator() +
             "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
             "\t\t</Root>" + System.lineSeparator() +
             "\t</Loggers>" + System.lineSeparator() +
@@ -99,10 +121,7 @@ public class ConfigurationBuilderTest {
     @Test
     public void testXmlConstructingWithAbstractConfiguration() throws Exception {
         final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
-        CustomConfigurationFactory.addTestFixtures("config name", builder);
-        builder.addProperty("MyKey", "MyValue");
-        builder.add(builder.newCustomLevel("Panic", 17));
-        builder.setPackages("foo,bar");
+        addTestFixtures("config name", builder);
         AbstractConfiguration configuration = builder.build(false);
         configuration.setup();
         final String xmlConfiguration = configuration.toXmlConfiguration();


[04/26] logging-log4j2 git commit: Fix method naming

Posted by mi...@apache.org.
Fix method naming


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

Branch: refs/heads/master
Commit: 97f626f0d3d4dd75b726cabd58f925dc335b1bcd
Parents: 486823a
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Fri Aug 19 22:27:43 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Fri Aug 19 22:27:43 2016 +0200

----------------------------------------------------------------------
 .../log4j/core/config/builder/api/ConfigurationBuilder.java  | 8 ++++----
 .../config/builder/impl/DefaultConfigurationBuilder.java     | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/97f626f0/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
index 2e7ef96..fba24fd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
@@ -410,16 +410,16 @@ public interface ConfigurationBuilder<T extends Configuration> extends Builder<T
     T build(boolean initialize);
 
     /**
-     * Write an XML configuration file from this builder.
+     * Constructs an XML configuration from this builder.
      *
      * @param output  OutputStream to write to, will not be closed
      */
-    void writeXmlConfigurationFile(OutputStream output) throws IOException;
+    void writeXmlConfiguration(OutputStream output) throws IOException;
 
     /**
-     * Write an XML configuration from this builder.
+     * Constructs an XML configuration from this builder.
      *
      * @return  XML configuration
      */
-    String writeXmlConfiguration();
+    String toXmlConfiguration();
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/97f626f0/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 6834956..2fc78f4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -196,7 +196,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public void writeXmlConfigurationFile(final OutputStream output) throws IOException {
+    public void writeXmlConfiguration(final OutputStream output) throws IOException {
         try {
             XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
             writeConfigurationXml(xmlWriter);
@@ -211,7 +211,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     }
 
     @Override
-    public String writeXmlConfiguration() {
+    public String toXmlConfiguration() {
         StringWriter sw = new StringWriter();
         try {
             XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);


[19/26] logging-log4j2 git commit: Remove XML writing in AbstactConfiguration

Posted by mi...@apache.org.
Remove XML writing in AbstactConfiguration


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

Branch: refs/heads/master
Commit: 3e7df46bbdc4c7b1c0b5bb35572f4691e91d761e
Parents: 4ae1cc2
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 20:19:22 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 20:19:22 2016 +0200

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 154 -------------------
 .../builder/ConfigurationBuilderTest.java       |  43 +-----
 2 files changed, 2 insertions(+), 195 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3e7df46b/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 49a401b..ef3f668 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
@@ -46,17 +46,11 @@ import org.apache.logging.log4j.core.util.NameUtil;
 import org.apache.logging.log4j.core.util.NanoClock;
 import org.apache.logging.log4j.core.util.WatchManager;
 import org.apache.logging.log4j.util.PropertiesUtil;
-import org.apache.logging.log4j.util.Strings;
 
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.Serializable;
-import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -187,154 +181,6 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         return rootNode;
     }
 
-    private static final List<String> SECTION_NAMES =
-            Arrays.asList("Properties", "Scripts", "CustomLevels", "Filters", "Appenders", "Loggers");
-
-    public void writeXmlConfiguration(final OutputStream output) throws IOException {
-        try {
-            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
-            writeXmlConfiguration(xmlWriter);
-            xmlWriter.close();
-        } catch (XMLStreamException e) {
-            if (e.getNestedException() instanceof IOException) {
-                throw (IOException)e.getNestedException();
-            } else {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-
-    public String toXmlConfiguration() {
-        StringWriter sw = new StringWriter();
-        try {
-            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
-            writeXmlConfiguration(xmlWriter);
-            xmlWriter.close();
-        } catch (XMLStreamException e) {
-            throw new RuntimeException(e);
-        }
-        return sw.toString();
-    }
-
-    private void writeXmlConfiguration(XMLStreamWriter xmlWriter) throws XMLStreamException {
-        xmlWriter.writeStartDocument();
-        xmlWriter.writeCharacters(System.lineSeparator());
-
-        xmlWriter.writeStartElement("Configuration");
-
-        if (name != null) {
-            xmlWriter.writeAttribute("name", getName());
-        }
-        /* TODO status logger config
-        if (level != null) {
-            xmlWriter.writeAttribute("status", level.name());
-        }
-        if (verbosity != null) {
-            xmlWriter.writeAttribute("verbose", verbosity);
-        }
-        if (destination != null) {
-            xmlWriter.writeAttribute("dest", destination);
-        }
-        */
-        if (!getPluginPackages().isEmpty()) {
-            xmlWriter.writeAttribute("packages", Strings.join(getPluginPackages(), ','));
-        }
-        if (!isShutdownHookEnabled()) {
-            xmlWriter.writeAttribute("shutdownHook", "disable");
-        }
-        if (advertiserNode != null) {
-            xmlWriter.writeAttribute("advertiser", advertiserNode.getName());
-        }
-        if (getWatchManager().getIntervalSeconds() > 0) {
-            xmlWriter.writeAttribute("monitorInterval", String.valueOf(getWatchManager().getIntervalSeconds()));
-        }
-
-        xmlWriter.writeCharacters(System.lineSeparator());
-
-        writeXmlSection(xmlWriter, lookupSection("Properties"));
-        writeXmlSection(xmlWriter, lookupSection("Scripts"));
-        writeXmlSection(xmlWriter, lookupSection("CustomLevels"));
-        Node filters = lookupSection("Filters");
-        if (filters != null) {
-            writeXmlSection(xmlWriter, filters);
-        } else {
-            Node filter = lookupFilter();
-            if (filter != null) {
-                writeXmlNode(xmlWriter, filter, 1);
-            }
-        }
-
-        writeXmlSection(xmlWriter, lookupSection("Appenders"));
-        writeXmlSection(xmlWriter, lookupSection("Loggers"));
-
-        xmlWriter.writeEndElement(); // "Configuration"
-        xmlWriter.writeCharacters(System.lineSeparator());
-
-        xmlWriter.writeEndDocument();
-    }
-
-    private Node lookupSection(String name) {
-        for (final Node child : rootNode.getChildren()) {
-            if (child.getName().equalsIgnoreCase(name)) {
-                return child;
-            }
-        }
-        return null;
-    }
-
-    private Node lookupFilter() {
-        for (final Node child : rootNode.getChildren()) {
-            if (!SECTION_NAMES.contains(child.getName())) {
-                return child;
-            }
-        }
-        return null;
-    }
-
-    private void writeXmlSection(XMLStreamWriter xmlWriter, Node node) throws XMLStreamException {
-        if (node != null && (!node.getAttributes().isEmpty() || !node.getChildren().isEmpty() || node.getValue() != null)) {
-            writeXmlNode(xmlWriter, node, 1);
-        }
-    }
-
-    private void writeXmlNode(XMLStreamWriter xmlWriter, Node node, int nesting) throws XMLStreamException {
-        if (!node.getChildren().isEmpty() || node.getValue() != null) {
-            writeXmlIndent(xmlWriter, nesting);
-            xmlWriter.writeStartElement(node.getName());
-            writeXmlAttributes(xmlWriter, node);
-            if (!node.getChildren().isEmpty()) {
-                xmlWriter.writeCharacters(System.lineSeparator());
-            }
-            for (Node childNode : node.getChildren()) {
-                writeXmlNode(xmlWriter, childNode, nesting + 1);
-            }
-            if (node.getValue() != null) {
-                xmlWriter.writeCharacters(node.getValue());
-            }
-            if (!node.getChildren().isEmpty()) {
-                writeXmlIndent(xmlWriter, nesting);
-            }
-            xmlWriter.writeEndElement();
-        } else {
-            writeXmlIndent(xmlWriter, nesting);
-            xmlWriter.writeEmptyElement(node.getName());
-            writeXmlAttributes(xmlWriter, node);
-        }
-        xmlWriter.writeCharacters(System.lineSeparator());
-    }
-
-    private void writeXmlIndent(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
-        for (int i = 0; i < nesting; i++) {
-            xmlWriter.writeCharacters("\t");
-        }
-    }
-
-    private void writeXmlAttributes(XMLStreamWriter xmlWriter, Node node) throws XMLStreamException {
-        for (Map.Entry<String, String> attribute : node.getAttributes().entrySet()) {
-            xmlWriter.writeAttribute(attribute.getKey(), attribute.getValue());
-        }
-    }
-
     @Override
 	public AsyncLoggerConfigDelegate getAsyncLoggerConfigDelegate() {
 	    // lazily instantiate only when requested by AsyncLoggers:

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3e7df46b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index 3525125..87ecd26 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -19,7 +19,6 @@ package org.apache.logging.log4j.core.config.builder;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
-import org.apache.logging.log4j.core.config.AbstractConfiguration;
 import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
 import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
@@ -51,7 +50,7 @@ public class ConfigurationBuilderTest {
         builder.setPackages("foo,bar");
     }
 
-    private final static String expectedXml1 =
+    private final static String expectedXml =
             "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
             "<Configuration name=\"config name\" status=\"ERROR\" packages=\"foo,bar\">" + System.lineSeparator() +
             "\t<Properties>" + System.lineSeparator() +
@@ -85,45 +84,7 @@ public class ConfigurationBuilderTest {
         final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
         addTestFixtures("config name", builder);
         final String xmlConfiguration = builder.toXmlConfiguration();
-        assertEquals(expectedXml1, xmlConfiguration);
+        assertEquals(expectedXml, xmlConfiguration);
     }
 
-    private final static String expectedXml2 =
-            "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
-            "<Configuration name=\"config name\" status=\"ERROR\" packages=\"foo,bar\">" + System.lineSeparator() +
-            "\t<Properties>" + System.lineSeparator() +
-            "\t\t<Property name=\"MyKey\">MyValue</Property>" + System.lineSeparator() +
-            "\t</Properties>" + System.lineSeparator() +
-            "\t<Scripts>" + System.lineSeparator() +
-            "\t\t<ScriptFile name=\"target/test-classes/scripts/filter.groovy\" path=\"target/test-classes/scripts/filter.groovy\" isWatched=\"true\"/>" + System.lineSeparator() +
-            "\t</Scripts>" + System.lineSeparator() +
-            "\t<CustomLevels>" + System.lineSeparator() +
-            "\t\t<CustomLevel name=\"Panic\" intLevel=\"17\"/>" + System.lineSeparator() +
-            "\t</CustomLevels>" + System.lineSeparator() +
-            "\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
-            "\t<Appenders>" + System.lineSeparator() +
-            "\t\t<CONSOLE name=\"Stdout\" target=\"SYSTEM_OUT\">" + System.lineSeparator() +
-            "\t\t\t<PatternLayout pattern=\"%d [%t] %-5level: %msg%n%throwable\"/>" + System.lineSeparator() +
-            "\t\t\t<MarkerFilter onMatch=\"DENY\" onMisMatch=\"NEUTRAL\" marker=\"FLOW\"/>" + System.lineSeparator() +
-            "\t\t</CONSOLE>" + System.lineSeparator() +
-            "\t</Appenders>" + System.lineSeparator() +
-            "\t<Loggers>" + System.lineSeparator() +
-            "\t\t<Logger name=\"org.apache.logging.log4j\" additivity=\"false\" level=\"DEBUG\" includeLocation=\"true\">" + System.lineSeparator() +
-            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
-            "\t\t</Logger>" + System.lineSeparator() +
-            "\t\t<Root level=\"ERROR\">" + System.lineSeparator() +
-            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
-            "\t\t</Root>" + System.lineSeparator() +
-            "\t</Loggers>" + System.lineSeparator() +
-            "</Configuration>" + System.lineSeparator();
-
-    @Test
-    public void testXmlConstructingWithAbstractConfiguration() throws Exception {
-        final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
-        addTestFixtures("config name", builder);
-        AbstractConfiguration configuration = builder.build(false);
-        configuration.setup();
-        final String xmlConfiguration = configuration.toXmlConfiguration();
-        assertEquals(expectedXml2, xmlConfiguration);
-    }
 }


[09/26] logging-log4j2 git commit: Fix XML configuration formatting

Posted by mi...@apache.org.
Fix XML configuration formatting


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

Branch: refs/heads/master
Commit: 8723598057dd938be060961988f6d460f82dfe90
Parents: b1e8f6f
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 15:44:28 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 15:44:28 2016 +0200

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 189 +++++++++++++++++--
 .../impl/DefaultConfigurationBuilder.java       |  27 ++-
 .../builder/ConfigurationBuilderTest.java       |  58 +++++-
 3 files changed, 245 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/87235980/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 a152ea7..f123991 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
@@ -16,24 +16,6 @@
  */
 package org.apache.logging.log4j.core.config;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Filter;
@@ -65,6 +47,29 @@ import org.apache.logging.log4j.core.util.NanoClock;
 import org.apache.logging.log4j.core.util.WatchManager;
 import org.apache.logging.log4j.util.PropertiesUtil;
 
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
 /**
  * The base Configuration. Many configuration implementations will extend this class.
  */
@@ -181,6 +186,154 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         return rootNode;
     }
 
+    private static final List<String> SECTION_NAMES =
+            Arrays.asList("Properties", "Scripts", "CustomLevels", "Filters", "Appenders", "Loggers");
+
+    public void writeXmlConfiguration(final OutputStream output) throws IOException {
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
+            writeXmlConfiguration(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            if (e.getNestedException() instanceof IOException) {
+                throw (IOException)e.getNestedException();
+            } else {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    public String toXmlConfiguration() {
+        StringWriter sw = new StringWriter();
+        try {
+            XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
+            writeXmlConfiguration(xmlWriter);
+            xmlWriter.close();
+        } catch (XMLStreamException e) {
+            throw new RuntimeException(e);
+        }
+        return sw.toString();
+    }
+
+    private void writeXmlConfiguration(XMLStreamWriter xmlWriter) throws XMLStreamException {
+        xmlWriter.writeStartDocument();
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        xmlWriter.writeStartElement("Configuration");
+
+        if (name != null) {
+            xmlWriter.writeAttribute("name", getName());
+        }
+        /* TODO status logger config
+        if (level != null) {
+            xmlWriter.writeAttribute("status", level.name());
+        }
+        if (verbosity != null) {
+            xmlWriter.writeAttribute("verbose", verbosity);
+        }
+        if (destination != null) {
+            xmlWriter.writeAttribute("dest", destination);
+        }
+        */
+        if (!getPluginPackages().isEmpty()) {
+            xmlWriter.writeAttribute("packages", getPluginPackages().toString()); // TODO comma-separated string
+        }
+        if (!isShutdownHookEnabled()) {
+            xmlWriter.writeAttribute("shutdownHook", "disable");
+        }
+        if (advertiserNode != null) {
+            xmlWriter.writeAttribute("advertiser", advertiserNode.getName());
+        }
+        if (getWatchManager().getIntervalSeconds() > 0) {
+            xmlWriter.writeAttribute("monitorInterval", String.valueOf(getWatchManager().getIntervalSeconds()));
+        }
+
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        writeXmlSection(xmlWriter, lookupSection("Properties"));
+        writeXmlSection(xmlWriter, lookupSection("Scripts"));
+        writeXmlSection(xmlWriter, lookupSection("CustomLevels"));   // TODO customLevel level vs intLevel
+        Node filters = lookupSection("Filters");
+        if (filters != null) {
+            writeXmlSection(xmlWriter, filters);
+        } else {
+            Node filter = lookupFilter();
+            if (filter != null) {
+                writeXmlNode(xmlWriter, filter, 1);
+            }
+        }
+
+        writeXmlSection(xmlWriter, lookupSection("Appenders"));
+        writeXmlSection(xmlWriter, lookupSection("Loggers"));
+
+        xmlWriter.writeEndElement(); // "Configuration"
+        xmlWriter.writeCharacters(System.lineSeparator());
+
+        xmlWriter.writeEndDocument();
+    }
+
+    private Node lookupSection(String name) {
+        for (final Node child : rootNode.getChildren()) {
+            if (child.getName().equalsIgnoreCase(name)) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    private Node lookupFilter() {
+        for (final Node child : rootNode.getChildren()) {
+            if (!SECTION_NAMES.contains(child.getName())) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    private void writeXmlSection(XMLStreamWriter xmlWriter, Node node) throws XMLStreamException {
+        if (node != null && (!node.getAttributes().isEmpty() || !node.getChildren().isEmpty() || node.getValue() != null)) {
+            writeXmlNode(xmlWriter, node, 1);
+        }
+    }
+
+    private void writeXmlNode(XMLStreamWriter xmlWriter, Node node, int nesting) throws XMLStreamException {
+        if (!node.getChildren().isEmpty() || node.getValue() != null) {
+            writeXmlIndent(xmlWriter, nesting);
+            xmlWriter.writeStartElement(node.getName());
+            writeXmlAttributes(xmlWriter, node);
+            if (!node.getChildren().isEmpty()) {
+                xmlWriter.writeCharacters(System.lineSeparator());
+            }
+            for (Node childNode : node.getChildren()) {
+                writeXmlNode(xmlWriter, childNode, nesting + 1);
+            }
+            if (node.getValue() != null) {
+                xmlWriter.writeCharacters(node.getValue());
+            }
+            if (!node.getChildren().isEmpty()) {
+                writeXmlIndent(xmlWriter, nesting);
+            }
+            xmlWriter.writeEndElement();
+        } else {
+            writeXmlIndent(xmlWriter, nesting);
+            xmlWriter.writeEmptyElement(node.getName());
+            writeXmlAttributes(xmlWriter, node);
+        }
+        xmlWriter.writeCharacters(System.lineSeparator());
+    }
+
+    private void writeXmlIndent(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
+        for (int i = 0; i < nesting; i++) {
+            xmlWriter.writeCharacters("\t");
+        }
+    }
+
+    private void writeXmlAttributes(XMLStreamWriter xmlWriter, Node node) throws XMLStreamException {
+        for (Map.Entry<String, String> attribute : node.getAttributes().entrySet()) {
+            xmlWriter.writeAttribute(attribute.getKey(), attribute.getValue());
+        }
+    }
+
     @Override
 	public AsyncLoggerConfigDelegate getAsyncLoggerConfigDelegate() {
 	    // lazily instantiate only when requested by AsyncLoggers:

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/87235980/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 47688f7..e3de1ae 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -255,11 +255,16 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
 
         xmlWriter.writeCharacters(System.lineSeparator());
 
-        for (Component component : root.getComponents()) {
-            if (!component.getAttributes().isEmpty() || !component.getComponents().isEmpty() || component.getValue() != null) {
-                writeXmlComponent(xmlWriter, component, 1);
-            }
+        writeXmlSection(xmlWriter, properties);
+        writeXmlSection(xmlWriter, scripts);
+        writeXmlSection(xmlWriter, customLevels);   // TODO customLevel level vs intLevel
+        if (filters.getComponents().size() == 1) {
+            writeXmlComponent(xmlWriter, filters.getComponents().get(0), 1);
+        } else if (filters.getComponents().size() > 1) {
+            writeXmlSection(xmlWriter, filters);
         }
+        writeXmlSection(xmlWriter, appenders);
+        writeXmlSection(xmlWriter, loggers);
 
         xmlWriter.writeEndElement(); // "Configuration"
         xmlWriter.writeCharacters(System.lineSeparator());
@@ -267,19 +272,29 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         xmlWriter.writeEndDocument();
     }
 
+    private void writeXmlSection(XMLStreamWriter xmlWriter, Component component) throws XMLStreamException {
+        if (!component.getAttributes().isEmpty() || !component.getComponents().isEmpty() || component.getValue() != null) {
+            writeXmlComponent(xmlWriter, component, 1);
+        }
+    }
+
     private void writeXmlComponent(XMLStreamWriter xmlWriter, Component component, int nesting) throws XMLStreamException {
         if (!component.getComponents().isEmpty() || component.getValue() != null) {
             writeXmlIndent(xmlWriter, nesting);
             xmlWriter.writeStartElement(component.getPluginType());
             writeXmlAttributes(xmlWriter, component);
-            xmlWriter.writeCharacters(System.lineSeparator());
+            if (!component.getComponents().isEmpty()) {
+                xmlWriter.writeCharacters(System.lineSeparator());
+            }
             for (Component subComponent : component.getComponents()) {
                 writeXmlComponent(xmlWriter, subComponent, nesting + 1);
             }
             if (component.getValue() != null) {
                 xmlWriter.writeCharacters(component.getValue());
             }
-            writeXmlIndent(xmlWriter, nesting);
+            if (!component.getComponents().isEmpty()) {
+                writeXmlIndent(xmlWriter, nesting);
+            }
             xmlWriter.writeEndElement();
         } else {
             writeXmlIndent(xmlWriter, nesting);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/87235980/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index 3d8c4d2..b4b2bff 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.logging.log4j.core.config.builder;
 
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.config.AbstractConfiguration;
 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.impl.BuiltConfiguration;
@@ -25,15 +27,19 @@ import static org.junit.Assert.assertEquals;
 
 public class ConfigurationBuilderTest {
 
-    private final static String expectedXml =
+    private final static String expectedXml1 =
             "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
             "<Configuration name=\"config name\" status=\"ERROR\">" + System.lineSeparator() +
+            "\t<Properties>" + System.lineSeparator() +
+            "\t\t<Property name=\"MyKey\">MyValue</Property>" + System.lineSeparator() +
+            "\t</Properties>" + System.lineSeparator() +
             "\t<Scripts>" + System.lineSeparator() +
             "\t\t<ScriptFile path=\"target/test-classes/scripts/filter.groovy\" name=\"target/test-classes/scripts/filter.groovy\" isWatched=\"true\"/>" + System.lineSeparator() +
             "\t</Scripts>" + System.lineSeparator() +
-            "\t<Filters>" + System.lineSeparator() +
-            "\t\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
-            "\t</Filters>" + System.lineSeparator() +
+            "\t<CustomLevels>" + System.lineSeparator() +
+            "\t\t<CustomLevel intLevel=\"17\" name=\"Panic\"/>" + System.lineSeparator() +
+            "\t</CustomLevels>" + System.lineSeparator() +
+            "\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
             "\t<Appenders>" + System.lineSeparator() +
             "\t\t<CONSOLE name=\"Stdout\" target=\"SYSTEM_OUT\">" + System.lineSeparator() +
             "\t\t\t<PatternLayout pattern=\"%d [%t] %-5level: %msg%n%throwable\"/>" + System.lineSeparator() +
@@ -54,8 +60,50 @@ public class ConfigurationBuilderTest {
     public void testXmlConstructing() throws Exception {
         final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
         CustomConfigurationFactory.addTestFixtures("config name", builder);
+        builder.addProperty("MyKey", "MyValue");
+        builder.add(builder.newCustomLevel("Panic", 17));
         final String xmlConfiguration = builder.toXmlConfiguration();
-        assertEquals(expectedXml, xmlConfiguration);
+        assertEquals(expectedXml1, xmlConfiguration);
     }
 
+    private final static String expectedXml2 =
+            "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
+            "<Configuration name=\"config name\" status=\"ERROR\">" + System.lineSeparator() +
+            "\t<Properties>" + System.lineSeparator() +
+            "\t\t<Property name=\"MyKey\">MyValue</Property>" + System.lineSeparator() +
+            "\t</Properties>" + System.lineSeparator() +
+            "\t<Scripts>" + System.lineSeparator() +
+            "\t\t<ScriptFile name=\"target/test-classes/scripts/filter.groovy\" path=\"target/test-classes/scripts/filter.groovy\" isWatched=\"true\"/>" + System.lineSeparator() +
+            "\t</Scripts>" + System.lineSeparator() +
+            "\t<CustomLevels>" + System.lineSeparator() +
+            "\t\t<CustomLevel name=\"Panic\" intLevel=\"17\"/>" + System.lineSeparator() +
+            "\t</CustomLevels>" + System.lineSeparator() +
+            "\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
+            "\t<Appenders>" + System.lineSeparator() +
+            "\t\t<CONSOLE name=\"Stdout\" target=\"SYSTEM_OUT\">" + System.lineSeparator() +
+            "\t\t\t<PatternLayout pattern=\"%d [%t] %-5level: %msg%n%throwable\"/>" + System.lineSeparator() +
+            "\t\t\t<MarkerFilter onMatch=\"DENY\" onMisMatch=\"NEUTRAL\" marker=\"FLOW\"/>" + System.lineSeparator() +
+            "\t\t</CONSOLE>" + System.lineSeparator() +
+            "\t</Appenders>" + System.lineSeparator() +
+            "\t<Loggers>" + System.lineSeparator() +
+            "\t\t<Logger name=\"org.apache.logging.log4j\" additivity=\"false\" level=\"DEBUG\" includeLocation=\"true\">" + System.lineSeparator() +
+            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
+            "\t\t</Logger>" + System.lineSeparator() +
+            "\t\t<Root level=\"ERROR\" includeLocation=\"true\">" + System.lineSeparator() +
+            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
+            "\t\t</Root>" + System.lineSeparator() +
+            "\t</Loggers>" + System.lineSeparator() +
+            "</Configuration>" + System.lineSeparator();
+
+    @Test
+    public void testXmlConstructingWithAbstractConfiguration() throws Exception {
+        final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
+        CustomConfigurationFactory.addTestFixtures("config name", builder);
+        builder.addProperty("MyKey", "MyValue");
+        builder.add(builder.newCustomLevel("Panic", 17));
+        AbstractConfiguration configuration = builder.build(false);
+        configuration.setup();
+        final String xmlConfiguration = configuration.toXmlConfiguration();
+        assertEquals(expectedXml2, xmlConfiguration);
+    }
 }


[18/26] logging-log4j2 git commit: Remove TODO for includeLocation on Loggers in ConfigurationBuilder

Posted by mi...@apache.org.
Remove TODO for includeLocation on Loggers in ConfigurationBuilder


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

Branch: refs/heads/master
Commit: 4ae1cc24579dcb4afc9e25024d6e86bc84791600
Parents: 090d63a
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 20:16:42 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 20:16:42 2016 +0200

----------------------------------------------------------------------
 .../apache/logging/log4j/core/config/AbstractConfiguration.java | 2 +-
 .../core/config/builder/impl/DefaultConfigurationBuilder.java   | 2 +-
 .../log4j/core/config/builder/ConfigurationBuilderTest.java     | 5 ++---
 3 files changed, 4 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ae1cc24/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 68f88d1..49a401b 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
@@ -265,7 +265,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
 
         writeXmlSection(xmlWriter, lookupSection("Appenders"));
-        writeXmlSection(xmlWriter, lookupSection("Loggers"));        // TODO includeLocation on loggers
+        writeXmlSection(xmlWriter, lookupSection("Loggers"));
 
         xmlWriter.writeEndElement(); // "Configuration"
         xmlWriter.writeCharacters(System.lineSeparator());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ae1cc24/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index db06046..7bbb5fa 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -264,7 +264,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
             writeXmlSection(xmlWriter, filters);
         }
         writeXmlSection(xmlWriter, appenders);
-        writeXmlSection(xmlWriter, loggers);        // TODO includeLocation on loggers
+        writeXmlSection(xmlWriter, loggers);
 
         xmlWriter.writeEndElement(); // "Configuration"
         xmlWriter.writeCharacters(System.lineSeparator());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4ae1cc24/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index c975e01..3525125 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -42,10 +42,9 @@ public class ConfigurationBuilderTest {
         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).
+        builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG, true).
                     add(builder.newAppenderRef("Stdout")).
-                    addAttribute("additivity", false).
-                    addAttribute("includeLocation", true));
+                    addAttribute("additivity", false));
         builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
         builder.addProperty("MyKey", "MyValue");
         builder.add(builder.newCustomLevel("Panic", 17));


[08/26] logging-log4j2 git commit: Fix method naming

Posted by mi...@apache.org.
Fix method naming


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

Branch: refs/heads/master
Commit: b1e8f6f3e7758dfaa05c464e382530ddf89834e1
Parents: ce08bfb
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 13:58:45 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 13:58:45 2016 +0200

----------------------------------------------------------------------
 .../impl/DefaultConfigurationBuilder.java       | 26 ++++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b1e8f6f3/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index b32b037..47688f7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -199,7 +199,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
     public void writeXmlConfiguration(final OutputStream output) throws IOException {
         try {
             XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(output);
-            writeConfigurationXml(xmlWriter);
+            writeXmlConfiguration(xmlWriter);
             xmlWriter.close();
         } catch (XMLStreamException e) {
             if (e.getNestedException() instanceof IOException) {
@@ -215,7 +215,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         StringWriter sw = new StringWriter();
         try {
             XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
-            writeConfigurationXml(xmlWriter);
+            writeXmlConfiguration(xmlWriter);
             xmlWriter.close();
         } catch (XMLStreamException e) {
             throw new RuntimeException(e);
@@ -223,7 +223,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         return sw.toString();
     }
 
-    private void writeConfigurationXml(XMLStreamWriter xmlWriter) throws XMLStreamException {
+    private void writeXmlConfiguration(XMLStreamWriter xmlWriter) throws XMLStreamException {
         xmlWriter.writeStartDocument();
         xmlWriter.writeCharacters(System.lineSeparator());
 
@@ -257,7 +257,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
 
         for (Component component : root.getComponents()) {
             if (!component.getAttributes().isEmpty() || !component.getComponents().isEmpty() || component.getValue() != null) {
-                writeComponentXml(xmlWriter, component, 1);
+                writeXmlComponent(xmlWriter, component, 1);
             }
         }
 
@@ -267,35 +267,35 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         xmlWriter.writeEndDocument();
     }
 
-    private void writeComponentXml(XMLStreamWriter xmlWriter, Component component, int nesting) throws XMLStreamException {
+    private void writeXmlComponent(XMLStreamWriter xmlWriter, Component component, int nesting) throws XMLStreamException {
         if (!component.getComponents().isEmpty() || component.getValue() != null) {
-            indentXml(xmlWriter, nesting);
+            writeXmlIndent(xmlWriter, nesting);
             xmlWriter.writeStartElement(component.getPluginType());
-            writeAttributesXml(xmlWriter, component);
+            writeXmlAttributes(xmlWriter, component);
             xmlWriter.writeCharacters(System.lineSeparator());
             for (Component subComponent : component.getComponents()) {
-                writeComponentXml(xmlWriter, subComponent, nesting + 1);
+                writeXmlComponent(xmlWriter, subComponent, nesting + 1);
             }
             if (component.getValue() != null) {
                 xmlWriter.writeCharacters(component.getValue());
             }
-            indentXml(xmlWriter, nesting);
+            writeXmlIndent(xmlWriter, nesting);
             xmlWriter.writeEndElement();
         } else {
-            indentXml(xmlWriter, nesting);
+            writeXmlIndent(xmlWriter, nesting);
             xmlWriter.writeEmptyElement(component.getPluginType());
-            writeAttributesXml(xmlWriter, component);
+            writeXmlAttributes(xmlWriter, component);
         }
         xmlWriter.writeCharacters(System.lineSeparator());
     }
 
-    private void indentXml(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
+    private void writeXmlIndent(XMLStreamWriter xmlWriter, int nesting) throws XMLStreamException {
         for (int i = 0; i < nesting; i++) {
             xmlWriter.writeCharacters("\t");
         }
     }
 
-    private void writeAttributesXml(XMLStreamWriter xmlWriter, Component component) throws XMLStreamException {
+    private void writeXmlAttributes(XMLStreamWriter xmlWriter, Component component) throws XMLStreamException {
         for (Map.Entry<String, String> attribute : component.getAttributes().entrySet()) {
             xmlWriter.writeAttribute(attribute.getKey(), attribute.getValue());
         }


[20/26] logging-log4j2 git commit: Revert change

Posted by mi...@apache.org.
Revert change


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

Branch: refs/heads/master
Commit: fcfb672ca74ea5a3e7179a165339bb17f4d451e3
Parents: 3e7df46
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 20:21:28 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 20:21:28 2016 +0200

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 36 ++++++++++----------
 1 file changed, 18 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/fcfb672c/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 ef3f668..a152ea7 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
@@ -16,6 +16,24 @@
  */
 package org.apache.logging.log4j.core.config;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Filter;
@@ -47,24 +65,6 @@ import org.apache.logging.log4j.core.util.NanoClock;
 import org.apache.logging.log4j.core.util.WatchManager;
 import org.apache.logging.log4j.util.PropertiesUtil;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
 /**
  * The base Configuration. Many configuration implementations will extend this class.
  */


[06/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528


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

Branch: refs/heads/master
Commit: cc215c76d41f8eeb6e8a273c16387a194b63278e
Parents: 7a1cd3a 03fe13f
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 10:17:23 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 10:17:23 2016 +0200

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/Logger.java   |  20 +
 .../org/apache/logging/log4j/ThreadContext.java |  55 +--
 .../log4j/spi/DefaultThreadContextMap.java      |   6 +-
 .../logging/log4j/spi/ThreadContextMap.java     |  13 +-
 .../logging/log4j/spi/ThreadContextMap2.java    |  40 ++
 .../logging/log4j/spi/ThreadContextStack.java   |   1 +
 .../logging/log4j/core/LoggerContext.java       |   1 +
 .../log4j/core/appender/AbstractManager.java    |   2 +
 .../log4j/core/appender/FileAppender.java       |  12 +-
 .../log4j/core/appender/FileManager.java        |  36 +-
 .../core/appender/OutputStreamManager.java      |  18 +-
 .../core/appender/RollingFileAppender.java      | 372 ++++++++++++-------
 .../core/appender/mom/kafka/KafkaManager.java   | 185 +++++----
 .../appender/rolling/RollingFileManager.java    |  50 ++-
 .../core/async/AsyncLoggerConfigDisruptor.java  |   3 +-
 .../log4j/core/async/AsyncLoggerDisruptor.java  |   3 +-
 .../log4j/core/async/DaemonThreadFactory.java   |  53 ---
 .../log4j/core/async/RingBufferLogEvent.java    |   4 +-
 .../core/config/ConfigurationScheduler.java     |  15 +-
 .../config/composite/DefaultMergeStrategy.java  |   1 +
 .../apache/logging/log4j/core/jmx/Server.java   |   5 +-
 .../log4j/core/layout/PatternLayout.java        |   4 +-
 .../logging/log4j/core/util/Log4jThread.java    | 138 +++----
 .../log4j/core/util/Log4jThreadFactory.java     |  88 +++++
 .../log4j/core/appender/FileAppenderTest.java   |  48 +--
 .../rolling/OnStartupTriggeringPolicyTest.java  |  10 +-
 .../rolling/RollingAppenderSizeTest.java        |  43 ++-
 .../rolling/RollingFileAppenderAccessTest.java  |  61 +--
 .../core/async/RingBufferLogEventTest.java      |  18 +-
 .../core/config/CompositeConfigurationTest.java |  34 +-
 .../log4j-comp-logger-attr-override.json        |  38 ++
 .../test/resources/log4j-comp-logger-root.xml   |  44 +++
 .../test/resources/log4j-rolling-7z-lazy.xml    |  59 +++
 .../test/resources/log4j-rolling-bzip2-lazy.xml |  60 +++
 .../resources/log4j-rolling-deflate-lazy.xml    |  60 +++
 .../test/resources/log4j-rolling-gz-lazy.xml    |  59 +++
 .../resources/log4j-rolling-pack200-lazy.xml    |  60 +++
 .../test/resources/log4j-rolling-xz-lazy.xml    |  60 +++
 .../test/resources/log4j-rolling-zip-lazy.xml   |  60 +++
 .../flume/appender/FlumePersistentManager.java  |  30 +-
 .../org/apache/logging/slf4j/MDCContextMap.java |   7 +-
 src/changes/changes.xml                         |  15 +-
 src/site/xdoc/manual/appenders.xml              |  18 +-
 43 files changed, 1354 insertions(+), 555 deletions(-)
----------------------------------------------------------------------



[16/26] logging-log4j2 git commit: Remove TODO for CustomLevel in ConfigurationBuilder

Posted by mi...@apache.org.
Remove TODO for CustomLevel in ConfigurationBuilder


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

Branch: refs/heads/master
Commit: 244b79b36623b6a61cdb5c1d5715bd2b32083290
Parents: 7ab63d4
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 19:17:25 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 19:17:25 2016 +0200

----------------------------------------------------------------------
 .../apache/logging/log4j/core/config/AbstractConfiguration.java    | 2 +-
 .../core/config/builder/impl/DefaultConfigurationBuilder.java      | 2 +-
 .../log4j/core/config/builder/ConfigurationBuilderTest.java        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/244b79b3/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 b098334..68f88d1 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
@@ -253,7 +253,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
 
         writeXmlSection(xmlWriter, lookupSection("Properties"));
         writeXmlSection(xmlWriter, lookupSection("Scripts"));
-        writeXmlSection(xmlWriter, lookupSection("CustomLevels"));   // TODO customLevel level vs intLevel
+        writeXmlSection(xmlWriter, lookupSection("CustomLevels"));
         Node filters = lookupSection("Filters");
         if (filters != null) {
             writeXmlSection(xmlWriter, filters);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/244b79b3/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 849a9f4..139d721 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -257,7 +257,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
 
         writeXmlSection(xmlWriter, properties);
         writeXmlSection(xmlWriter, scripts);
-        writeXmlSection(xmlWriter, customLevels);   // TODO customLevel level vs intLevel
+        writeXmlSection(xmlWriter, customLevels);
         if (filters.getComponents().size() == 1) {
             writeXmlComponent(xmlWriter, filters.getComponents().get(0), 1);
         } else if (filters.getComponents().size() > 1) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/244b79b3/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index 15b9599..c975e01 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -62,7 +62,7 @@ public class ConfigurationBuilderTest {
             "\t\t<ScriptFile path=\"target/test-classes/scripts/filter.groovy\" name=\"target/test-classes/scripts/filter.groovy\" isWatched=\"true\"/>" + System.lineSeparator() +
             "\t</Scripts>" + System.lineSeparator() +
             "\t<CustomLevels>" + System.lineSeparator() +
-            "\t\t<CustomLevel intLevel=\"17\" name=\"Panic\"/>" + System.lineSeparator() +
+            "\t\t<CustomLevel name=\"Panic\" intLevel=\"17\"/>" + System.lineSeparator() +
             "\t</CustomLevels>" + System.lineSeparator() +
             "\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
             "\t<Appenders>" + System.lineSeparator() +


[22/26] logging-log4j2 git commit: merged master into LOG4J2-1528

Posted by mi...@apache.org.
merged master into LOG4J2-1528


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

Branch: refs/heads/master
Commit: 557a4c87597895beed9d9861d8dc1a3e9f6ceb65
Parents: 7a1cd3a 139f57b
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 28 19:26:06 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Aug 28 19:26:06 2016 +0900

----------------------------------------------------------------------
 .../config/Log4j1ConfigurationFactory.java      | 311 +---------
 .../log4j/config/Log4j1ConfigurationParser.java | 327 ++++++++++
 .../apache/log4j/BasicConfigurationFactory.java |  13 +-
 .../config/Log4j1ConfigurationFactoryTest.java  |  29 +-
 ...g4j-console-EnhancedPatternLayout.properties |   3 +-
 .../log4j-console-HtmlLayout.properties         |   1 -
 .../log4j-console-PatternLayout.properties      |   1 -
 .../log4j-console-SimpleLayout.properties       |   1 -
 .../log4j-console-TTCCLayout.properties         |   1 -
 .../log4j-console-XmlLayout.properties          |   1 -
 .../log4j-file-SimpleLayout.properties          |  17 +
 log4j-api-scala_2.10/.gitignore                 |   3 +
 log4j-api-scala_2.10/pom.xml                    | 150 +++++
 .../org/apache/logging/log4j/scala/Logger.scala | 592 +++++++++++++++++++
 .../logging/log4j/scala/LoggerMacro.scala       | 425 +++++++++++++
 .../apache/logging/log4j/scala/Logging.scala    |  30 +
 .../apache/logging/log4j/scala/LoggerTest.scala | 550 +++++++++++++++++
 log4j-api-scala_2.11/.gitignore                 |   3 +
 log4j-api-scala_2.11/pom.xml                    | 150 +++++
 .../org/apache/logging/log4j/scala/Logger.scala | 592 +++++++++++++++++++
 .../logging/log4j/scala/LoggerMacro.scala       | 425 +++++++++++++
 .../apache/logging/log4j/scala/Logging.scala    |  30 +
 .../apache/logging/log4j/scala/LoggerTest.scala | 550 +++++++++++++++++
 .../java/org/apache/logging/log4j/Logger.java   |  20 +
 .../org/apache/logging/log4j/ThreadContext.java |  55 +-
 .../log4j/spi/DefaultThreadContextMap.java      |   6 +-
 .../logging/log4j/spi/ThreadContextMap.java     |  13 +-
 .../logging/log4j/spi/ThreadContextMap2.java    |  40 ++
 .../logging/log4j/spi/ThreadContextStack.java   |   1 +
 log4j-bom/pom.xml                               |  12 +
 .../logging/log4j/core/AbstractLifeCycle.java   |   8 +
 .../apache/logging/log4j/core/LifeCycle.java    |  13 +
 .../logging/log4j/core/LoggerContext.java       | 140 ++++-
 .../log4j/core/appender/AbstractManager.java    |  19 +-
 .../core/appender/ConfigurationFactoryData.java |  50 ++
 .../log4j/core/appender/ConsoleAppender.java    |   4 -
 .../log4j/core/appender/FileAppender.java       |  28 +-
 .../log4j/core/appender/FileManager.java        |  58 +-
 .../core/appender/OutputStreamManager.java      |  26 +-
 .../core/appender/RandomAccessFileAppender.java |   2 +-
 .../core/appender/RandomAccessFileManager.java  |  27 +-
 .../core/appender/RollingFileAppender.java      | 372 +++++++-----
 .../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/KafkaAppender.java  |   7 +-
 .../core/appender/mom/kafka/KafkaManager.java   | 185 +++---
 .../appender/rolling/RollingFileManager.java    |  68 ++-
 .../rolling/RollingRandomAccessFileManager.java |  32 +-
 .../core/appender/rolling/TriggeringPolicy.java |   2 +-
 .../core/async/AsyncLoggerConfigDisruptor.java  |   3 +-
 .../log4j/core/async/AsyncLoggerDisruptor.java  |   3 +-
 .../log4j/core/async/DaemonThreadFactory.java   |  53 --
 .../log4j/core/async/RingBufferLogEvent.java    |   4 +-
 .../core/config/AbstractConfiguration.java      |  42 +-
 .../log4j/core/config/AppenderControl.java      |   3 +-
 .../log4j/core/config/Configuration.java        |   8 +
 .../log4j/core/config/ConfigurationFactory.java |  86 +--
 .../core/config/ConfigurationScheduler.java     |  23 +-
 .../core/config/ConfiguratonFileWatcher.java    |  10 +-
 .../logging/log4j/core/config/Configurator.java |  36 +-
 .../log4j/core/config/DefaultConfiguration.java |   2 +-
 .../logging/log4j/core/config/LoggerConfig.java |  36 +-
 .../log4j/core/config/NullConfiguration.java    |   2 +-
 .../builder/api/ConfigurationBuilder.java       |   7 +
 .../config/builder/impl/BuiltConfiguration.java |   5 +-
 .../impl/DefaultConfigurationBuilder.java       |  45 +-
 .../DefaultCustomLevelComponentBuilder.java     |   2 +-
 .../composite/CompositeConfiguration.java       |   4 +-
 .../config/composite/DefaultMergeStrategy.java  |   1 +
 .../core/config/json/JsonConfiguration.java     |  14 +-
 .../config/json/JsonConfigurationFactory.java   |   5 +-
 .../config/plugins/PluginBuilderFactory.java    |   1 +
 .../config/plugins/PluginConfiguration.java     |   1 +
 .../core/config/plugins/PluginFactory.java      |   2 +-
 .../log4j/core/config/plugins/PluginNode.java   |   1 +
 .../core/config/plugins/util/PluginBuilder.java |   2 -
 .../config/plugins/util/PluginRegistry.java     |   1 -
 .../core/config/plugins/util/ResolverUtil.java  |  13 +-
 .../properties/PropertiesConfiguration.java     |   8 +-
 .../PropertiesConfigurationBuilder.java         |  16 +-
 .../PropertiesConfigurationFactory.java         |  13 +-
 .../log4j/core/config/xml/XmlConfiguration.java |  47 +-
 .../config/xml/XmlConfigurationFactory.java     |   6 +-
 .../core/config/yaml/YamlConfiguration.java     |   7 +-
 .../config/yaml/YamlConfigurationFactory.java   |   5 +-
 .../core/filter/DynamicThresholdFilter.java     |  85 ++-
 .../log4j/core/impl/Log4jContextFactory.java    |   6 +-
 .../log4j/core/jackson/Initializers.java        |  10 +-
 .../log4j/core/jackson/Log4jJsonModule.java     |   9 +-
 .../core/jackson/Log4jJsonObjectMapper.java     |   6 +-
 .../log4j/core/jackson/Log4jXmlModule.java      |   6 +-
 .../core/jackson/Log4jXmlObjectMapper.java      |   9 +-
 .../log4j/core/jackson/Log4jYamlModule.java     |   9 +-
 .../core/jackson/Log4jYamlObjectMapper.java     |   6 +-
 .../ThrowableProxyWithoutStacktraceMixIn.java   |  77 +++
 .../log4j/core/jmx/LoggerContextAdmin.java      |   4 +-
 .../apache/logging/log4j/core/jmx/Server.java   |  19 +-
 .../log4j/core/layout/JacksonFactory.java       |  22 +-
 .../logging/log4j/core/layout/JsonLayout.java   |  14 +-
 .../log4j/core/layout/PatternLayout.java        |   4 +-
 .../logging/log4j/core/layout/XmlLayout.java    |  15 +-
 .../logging/log4j/core/layout/YamlLayout.java   |  13 +-
 .../logging/log4j/core/net/JndiManager.java     |   2 +-
 .../logging/log4j/core/net/SmtpManager.java     |   2 +-
 .../core/net/server/AbstractSocketServer.java   |   7 +-
 .../log4j/core/net/server/JmsServer.java        |  10 +-
 .../server/JsonInputStreamLogEventBridge.java   |   2 +-
 .../log4j/core/script/ScriptManager.java        |   1 -
 .../core/selector/BasicContextSelector.java     | 131 ++--
 .../apache/logging/log4j/core/util/Assert.java  |  38 --
 .../logging/log4j/core/util/Constants.java      |  11 -
 .../util/DefaultShutdownCallbackRegistry.java   |   7 +
 .../logging/log4j/core/util/Log4jThread.java    | 138 ++---
 .../log4j/core/util/Log4jThreadFactory.java     |  99 ++++
 .../logging/log4j/MarkerMixInXmlTest.java       |   2 +-
 .../log4j/core/BasicConfigurationFactory.java   |   6 +-
 .../log4j/core/appender/FileAppenderTest.java   |  48 +-
 .../core/appender/OutputStreamAppenderTest.java |   2 +-
 .../appender/RandomAccessFileManagerTest.java   |  18 +-
 .../rolling/OnStartupTriggeringPolicyTest.java  |  10 +-
 .../RandomRollingAppenderOnStartupTest.java     |   2 +-
 .../RollingAppenderCronOnceADayTest.java        | 125 ++++
 .../rolling/RollingAppenderCronTest.java        |   2 +-
 .../RollingAppenderCustomDeleteActionTest.java  |   2 +-
 ...lingAppenderDeleteAccumulatedCount1Test.java |   2 +-
 ...lingAppenderDeleteAccumulatedCount2Test.java |   2 +-
 ...ollingAppenderDeleteAccumulatedSizeTest.java |   2 +-
 .../RollingAppenderDeleteMaxDepthTest.java      |   2 +-
 .../RollingAppenderDeleteNestedTest.java        |   2 +-
 .../RollingAppenderDeleteScriptFri13thTest.java |   2 +-
 .../RollingAppenderDeleteScriptTest.java        |   2 +-
 ...ollingAppenderNoUnconditionalDeleteTest.java |   2 +-
 .../rolling/RollingAppenderOnStartupTest.java   |   2 +-
 .../rolling/RollingAppenderSizeTest.java        |  45 +-
 .../rolling/RollingAppenderTimeAndSizeTest.java |   4 +-
 .../rolling/RollingAppenderTimeTest.java        |   2 +-
 .../rolling/RollingFileAppenderAccessTest.java  |  61 +-
 ...RandomAccessFileManagerHeaderFooterTest.java |   3 +-
 .../RollingRandomAccessFileManagerTest.java     |  24 +-
 .../core/async/RingBufferLogEventTest.java      |  18 +-
 .../core/config/CompositeConfigurationTest.java |  34 +-
 .../log4j/core/config/ConfigurationTest.java    |   6 +
 .../builder/ConfigurationAssemblerTest.java     |  35 +-
 .../builder/CustomConfigurationFactory.java     |  18 +-
 .../plugins/util/PluginManagerPackagesTest.java |   2 +-
 .../util/ResolverUtilCustomProtocolTest.java    | 208 +++++++
 .../config/plugins/util/ResolverUtilTest.java   | 126 ++--
 .../core/filter/DynamicThresholdFilterTest.java |  17 +
 .../log4j/core/jackson/LevelMixInJsonTest.java  |   2 +-
 .../jackson/StackTraceElementMixInTest.java     |   2 +-
 .../core/layout/CsvParameterLayoutTest.java     |  59 +-
 .../log4j/core/layout/JsonLayoutTest.java       |  59 +-
 .../log4j/core/layout/LogEventFixtures.java     |   6 +-
 .../log4j/core/layout/XmlLayoutTest.java        |  59 +-
 .../log4j/core/layout/YamlLayoutTest.java       |  55 +-
 .../net/server/AbstractSocketServerTest.java    |   4 +-
 .../logging/log4j/junit/LoggerContextRule.java  |  27 +-
 .../junit/URLStreamHandlerFactoryRule.java      |  96 +++
 .../log4j-comp-logger-attr-override.json        |  38 ++
 .../test/resources/log4j-comp-logger-root.xml   |  44 ++
 .../test/resources/log4j-rolling-7z-lazy.xml    |  59 ++
 .../test/resources/log4j-rolling-bzip2-lazy.xml |  60 ++
 .../resources/log4j-rolling-cron-once-a-day.xml |  47 ++
 .../src/test/resources/log4j-rolling-cron.xml   |   2 +-
 .../src/test/resources/log4j-rolling-cron2.xml  |   2 +-
 .../resources/log4j-rolling-deflate-lazy.xml    |  60 ++
 .../test/resources/log4j-rolling-gz-lazy.xml    |  59 ++
 .../resources/log4j-rolling-pack200-lazy.xml    |  60 ++
 .../test/resources/log4j-rolling-xz-lazy.xml    |  60 ++
 .../test/resources/log4j-rolling-zip-lazy.xml   |  60 ++
 .../flume/appender/AbstractFlumeManager.java    |   2 +-
 .../flume/appender/FlumePersistentManager.java  |  30 +-
 .../configuration/CustomConfiguration.java      |  13 +-
 .../CustomConfigurationFactory.java             |  12 +-
 log4j-samples/pom.xml                           |   1 +
 log4j-samples/scala-api/pom.xml                 |  65 ++
 .../scala-api/src/main/resources/log4j2.xml     |  32 +
 .../logging/log4j/scalasample/LoggingApp.scala  |  31 +
 .../org/apache/logging/slf4j/MDCContextMap.java |   7 +-
 .../org/apache/logging/log4j/web/WebLookup.java |   8 -
 pom.xml                                         |  14 +-
 src/changes/changes.xml                         |  99 +++-
 src/site/site.xml                               |   1 +
 src/site/xdoc/manual/appenders.xml              |  18 +-
 src/site/xdoc/manual/customconfig.xml           |  10 +-
 src/site/xdoc/manual/extending.xml              |   8 +-
 src/site/xdoc/manual/layouts.xml.vm             |  15 +
 src/site/xdoc/manual/scala-api.xml              |  91 +++
 src/site/xdoc/runtime-dependencies.xml          |   7 +
 192 files changed, 7381 insertions(+), 1523 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/557a4c87/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/557a4c87/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------


[24/26] logging-log4j2 git commit: LOG4J2-1528 changes.xml

Posted by mi...@apache.org.
LOG4J2-1528 changes.xml


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

Branch: refs/heads/master
Commit: ea90a316d888a69e82f1de959a6bc69ae2d6d7ae
Parents: c72522f
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 28 19:32:18 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Aug 28 19:32:18 2016 +0900

----------------------------------------------------------------------
 src/changes/changes.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ea90a316/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 108d75a..0842ec5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+      <action issue="LOG4J2-1528" dev="mikes" type="add">
+        Create XML configuration file from ConfigurationBuilder.
+      </action>
       <action issue="LOG4J2-1181" dev="mikes" type="add">
         Scala API.
       </action>


[15/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528


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

Branch: refs/heads/master
Commit: 7ab63d49d935d481048f78d7a80bb2be13da2693
Parents: 634df7c f7298ce
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 19:14:56 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 19:14:56 2016 +0200

----------------------------------------------------------------------
 .../builder/impl/DefaultCustomLevelComponentBuilder.java     | 2 +-
 .../core/config/builder/ConfigurationAssemblerTest.java      | 8 ++++++++
 .../core/config/builder/CustomConfigurationFactory.java      | 1 +
 3 files changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[23/26] logging-log4j2 git commit: Merge remote-tracking branch 'origin/LOG4J2-1528' into LOG4J2-1528

Posted by mi...@apache.org.
Merge remote-tracking branch 'origin/LOG4J2-1528' into LOG4J2-1528

Conflicts:
	src/changes/changes.xml


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

Branch: refs/heads/master
Commit: c72522f426563139f952fccc2e87b6c10e380e79
Parents: 557a4c8 d8fb964
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 28 19:28:53 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Aug 28 19:28:53 2016 +0900

----------------------------------------------------------------------
 log4j-1.2-api/pom.xml                           |  4 -
 .../apache/log4j/layout/Log4j1XmlLayout.java    |  4 +-
 .../pattern/Log4j1NdcPatternConverter.java      |  4 +-
 .../org/apache/logging/log4j/util/Strings.java  | 63 ++++++++++++++
 .../impl/DefaultConfigurationBuilder.java       | 50 +++++++----
 .../builder/ConfigurationBuilderTest.java       | 90 ++++++++++++++++++++
 6 files changed, 190 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c72522f4/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------


[25/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528

# Conflicts:
#	src/changes/changes.xml


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

Branch: refs/heads/master
Commit: 45a7da2d27df625855f3b0529a716ee931cd987f
Parents: ea90a31 ef321c1
Author: Mikael St�ldal <mi...@magine.com>
Authored: Tue Aug 30 11:26:58 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Tue Aug 30 11:26:58 2016 +0200

----------------------------------------------------------------------
 .../core/appender/routing/IdlePurgePolicy.java  |  57 ++++++---
 .../core/appender/routing/RoutingAppender.java  |  35 +++---
 .../log4j/core/layout/AbstractCsvLayout.java    |  10 +-
 .../apache/logging/log4j/core/DeadlockTest.java |   2 +-
 .../logging/log4j/core/LoggerUpdateTest.java    |   2 +-
 .../CsvJsonParameterLayoutFileAppenderTest.java | 117 +++++++++++++++++++
 .../appender/JsonCompleteFileAppenderTest.java  |   2 +-
 .../appender/RandomAccessFileAppenderTests.java |   2 +-
 .../db/jdbc/AbstractJdbcAppenderTest.java       |  12 +-
 .../db/jpa/AbstractJpaAppenderTest.java         |  12 +-
 .../core/appender/db/jpa/JpaH2AppenderTest.java |  28 +++--
 .../db/jpa/JpaHyperSqlAppenderTest.java         |  28 +++--
 .../RollingAppenderCronOnceADayTest.java        |   4 +-
 .../rolling/RollingAppenderCronTest.java        |   2 +-
 .../routing/PropertiesRoutingAppenderTest.java  |   2 +-
 .../appender/routing/RoutingAppenderTest.java   |   2 +-
 .../routing/RoutingAppenderWithPurgingTest.java |  21 +++-
 .../routing/RoutingDefaultAppenderTest.java     |   2 +-
 .../log4j/core/config/ConfigurationTest.java    |   2 +-
 .../core/config/CustomConfigurationTest.java    |   2 +-
 .../core/config/MissingRootLoggerTest.java      |   2 +-
 .../logging/log4j/core/config/XIncludeTest.java |   2 +-
 .../core/util/ShutdownCallbackRegistryTest.java |   2 +-
 .../logging/log4j/junit/LoggerContextRule.java  |  22 ++--
 .../test/resources/log4j-cvs-json-parameter.xml |  32 +++++
 log4j-samples/scala-api/.gitignore              |   3 +
 src/site/xdoc/maven-artifacts.xml.vm            |  28 +++++
 27 files changed, 318 insertions(+), 117 deletions(-)
----------------------------------------------------------------------



[10/26] logging-log4j2 git commit: Test packages configuration attribute

Posted by mi...@apache.org.
Test packages configuration attribute


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

Branch: refs/heads/master
Commit: 0353fa47493a4f6b4c0ec8a5a397de7a001849c4
Parents: 8723598
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 16:25:55 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 16:25:55 2016 +0200

----------------------------------------------------------------------
 .../log4j/core/config/builder/ConfigurationBuilderTest.java    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0353fa47/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
index b4b2bff..951038f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -29,7 +29,7 @@ public class ConfigurationBuilderTest {
 
     private final static String expectedXml1 =
             "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
-            "<Configuration name=\"config name\" status=\"ERROR\">" + System.lineSeparator() +
+            "<Configuration name=\"config name\" status=\"ERROR\" packages=\"foo,bar\">" + System.lineSeparator() +
             "\t<Properties>" + System.lineSeparator() +
             "\t\t<Property name=\"MyKey\">MyValue</Property>" + System.lineSeparator() +
             "\t</Properties>" + System.lineSeparator() +
@@ -62,13 +62,14 @@ public class ConfigurationBuilderTest {
         CustomConfigurationFactory.addTestFixtures("config name", builder);
         builder.addProperty("MyKey", "MyValue");
         builder.add(builder.newCustomLevel("Panic", 17));
+        builder.setPackages("foo,bar");
         final String xmlConfiguration = builder.toXmlConfiguration();
         assertEquals(expectedXml1, xmlConfiguration);
     }
 
     private final static String expectedXml2 =
             "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
-            "<Configuration name=\"config name\" status=\"ERROR\">" + System.lineSeparator() +
+            "<Configuration name=\"config name\" status=\"ERROR\" packages=\"foo,bar\">" + System.lineSeparator() +
             "\t<Properties>" + System.lineSeparator() +
             "\t\t<Property name=\"MyKey\">MyValue</Property>" + System.lineSeparator() +
             "\t</Properties>" + System.lineSeparator() +
@@ -101,6 +102,7 @@ public class ConfigurationBuilderTest {
         CustomConfigurationFactory.addTestFixtures("config name", builder);
         builder.addProperty("MyKey", "MyValue");
         builder.add(builder.newCustomLevel("Panic", 17));
+        builder.setPackages("foo,bar");
         AbstractConfiguration configuration = builder.build(false);
         configuration.setup();
         final String xmlConfiguration = configuration.toXmlConfiguration();


[17/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528


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

Branch: refs/heads/master
Commit: 090d63ad192d3fedbde20aa4578ebab8571c29e9
Parents: 244b79b e73d9d4
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 20:14:36 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 20:14:36 2016 +0200

----------------------------------------------------------------------
 .../impl/DefaultConfigurationBuilder.java       | 16 ++++++------
 .../builder/ConfigurationAssemblerTest.java     | 27 ++++++++++++++++----
 .../builder/CustomConfigurationFactory.java     |  6 ++---
 3 files changed, 33 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/090d63ad/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------


[07/26] logging-log4j2 git commit: Unit test for ConfigurationBuilder XML generation

Posted by mi...@apache.org.
Unit test for ConfigurationBuilder XML generation


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

Branch: refs/heads/master
Commit: ce08bfbe41cc96b891446fd76595ac3611f92b5e
Parents: cc215c7
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 10:41:39 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 10:41:39 2016 +0200

----------------------------------------------------------------------
 .../impl/DefaultConfigurationBuilder.java       |  1 +
 .../builder/ConfigurationBuilderTest.java       | 61 ++++++++++++++++++++
 2 files changed, 62 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce08bfbe/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
index 2fc78f4..b32b037 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java
@@ -262,6 +262,7 @@ public class DefaultConfigurationBuilder<T extends BuiltConfiguration> implement
         }
 
         xmlWriter.writeEndElement(); // "Configuration"
+        xmlWriter.writeCharacters(System.lineSeparator());
 
         xmlWriter.writeEndDocument();
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ce08bfbe/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
new file mode 100644
index 0000000..3d8c4d2
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/builder/ConfigurationBuilderTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.config.builder;
+
+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.impl.BuiltConfiguration;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ConfigurationBuilderTest {
+
+    private final static String expectedXml =
+            "<?xml version='1.0' encoding='UTF-8'?>" + System.lineSeparator() +
+            "<Configuration name=\"config name\" status=\"ERROR\">" + System.lineSeparator() +
+            "\t<Scripts>" + System.lineSeparator() +
+            "\t\t<ScriptFile path=\"target/test-classes/scripts/filter.groovy\" name=\"target/test-classes/scripts/filter.groovy\" isWatched=\"true\"/>" + System.lineSeparator() +
+            "\t</Scripts>" + System.lineSeparator() +
+            "\t<Filters>" + System.lineSeparator() +
+            "\t\t<ThresholdFilter onMatch=\"ACCEPT\" level=\"DEBUG\" onMisMatch=\"NEUTRAL\"/>" + System.lineSeparator() +
+            "\t</Filters>" + System.lineSeparator() +
+            "\t<Appenders>" + System.lineSeparator() +
+            "\t\t<CONSOLE name=\"Stdout\" target=\"SYSTEM_OUT\">" + System.lineSeparator() +
+            "\t\t\t<PatternLayout pattern=\"%d [%t] %-5level: %msg%n%throwable\"/>" + System.lineSeparator() +
+            "\t\t\t<MarkerFilter onMatch=\"DENY\" onMisMatch=\"NEUTRAL\" marker=\"FLOW\"/>" + System.lineSeparator() +
+            "\t\t</CONSOLE>" + System.lineSeparator() +
+            "\t</Appenders>" + System.lineSeparator() +
+            "\t<Loggers>" + System.lineSeparator() +
+            "\t\t<Logger additivity=\"false\" level=\"DEBUG\" includeLocation=\"true\" name=\"org.apache.logging.log4j\">" + System.lineSeparator() +
+            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
+            "\t\t</Logger>" + System.lineSeparator() +
+            "\t\t<Root level=\"ERROR\" includeLocation=\"true\">" + System.lineSeparator() +
+            "\t\t\t<AppenderRef ref=\"Stdout\"/>" + System.lineSeparator() +
+            "\t\t</Root>" + System.lineSeparator() +
+            "\t</Loggers>" + System.lineSeparator() +
+            "</Configuration>" + System.lineSeparator();
+
+    @Test
+    public void testXmlConstructing() throws Exception {
+        final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
+        CustomConfigurationFactory.addTestFixtures("config name", builder);
+        final String xmlConfiguration = builder.toXmlConfiguration();
+        assertEquals(expectedXml, xmlConfiguration);
+    }
+
+}


[21/26] logging-log4j2 git commit: Update changes.xml

Posted by mi...@apache.org.
Update changes.xml


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

Branch: refs/heads/master
Commit: d8fb964705af0f0f0d47ca0d5e9f7af0353d6b43
Parents: fcfb672
Author: Mikael St�ldal <mi...@magine.com>
Authored: Mon Aug 22 10:26:07 2016 +0200
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Mon Aug 22 10:26:07 2016 +0200

----------------------------------------------------------------------
 src/changes/changes.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d8fb9647/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 767e097..626de55 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
+      <action issue="LOG4J2-1528" dev="mikes" type="add">
+        Create XML configuration file from ConfigurationBuilder.
+      </action>
       <action issue="LOG4J2-1529" dev="mattsicker" type="fix" due-to="Sridevi Narra">
         Attributes are not merged properly in composite configurations.
       </action>


[03/26] logging-log4j2 git commit: Merge remote-tracking branch 'origin/LOG4J2-1528' into LOG4J2-1528

Posted by mi...@apache.org.
Merge remote-tracking branch 'origin/LOG4J2-1528' into LOG4J2-1528

# Conflicts:
#	log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.java


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

Branch: refs/heads/master
Commit: 486823a6a23fbbd56f2b38415635c072311c66cd
Parents: ac80524 446fb87
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Wed Aug 17 22:23:07 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Wed Aug 17 22:23:07 2016 +0200

----------------------------------------------------------------------

----------------------------------------------------------------------



[13/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528


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

Branch: refs/heads/master
Commit: e0f5ec45099de8cb669c8b8327bcb9f003d3edc0
Parents: 5f361e0 520170c
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 17:10:03 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 17:10:03 2016 +0200

----------------------------------------------------------------------
 .../config/Log4j1ConfigurationFactory.java      | 312 +------------------
 .../log4j/config/Log4j1ConfigurationParser.java | 301 ++++++++++++++++++
 ...g4j-console-EnhancedPatternLayout.properties |   2 +-
 .../PropertiesConfigurationFactory.java         |   3 +-
 4 files changed, 317 insertions(+), 301 deletions(-)
----------------------------------------------------------------------



[11/26] logging-log4j2 git commit: Fix string-joining of packages configuration attribute

Posted by mi...@apache.org.
Fix string-joining of packages configuration attribute


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

Branch: refs/heads/master
Commit: 871a097181aa7f6136638d9f0a9e7095e32ef29f
Parents: 0353fa4
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Sun Aug 21 16:47:20 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Sun Aug 21 16:47:20 2016 +0200

----------------------------------------------------------------------
 .../org/apache/logging/log4j/util/Strings.java  | 63 ++++++++++++++++++++
 .../core/config/AbstractConfiguration.java      |  3 +-
 2 files changed, 65 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/871a0971/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
index 294b771..747bed4 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/Strings.java
@@ -16,7 +16,9 @@
  */
 package org.apache.logging.log4j.util;
 
+import java.util.Iterator;
 import java.util.Locale;
+import java.util.Objects;
 
 /**
  * <em>Consider this class private.</em>
@@ -166,4 +168,65 @@ public final class Strings {
         final String ts = str == null ? null : str.trim();
         return isEmpty(ts) ? null : ts;
     }
+
+    /**
+     * <p>Joins the elements of the provided {@code Iterable} into
+     * a single String containing the provided elements.</p>
+     *
+     * <p>No delimiter is added before or after the list. Null objects or empty
+     * strings within the iteration are represented by empty strings.</p>
+     *
+     * @param iterable  the {@code Iterable} providing the values to join together, may be null
+     * @param separator  the separator character to use
+     * @return the joined String, {@code null} if null iterator input
+     */
+    public static String join(final Iterable<?> iterable, final char separator) {
+        if (iterable == null) {
+            return null;
+        }
+        return join(iterable.iterator(), separator);
+    }
+
+    /**
+     * <p>Joins the elements of the provided {@code Iterator} into
+     * a single String containing the provided elements.</p>
+     *
+     * <p>No delimiter is added before or after the list. Null objects or empty
+     * strings within the iteration are represented by empty strings.</p>
+     *
+     * @param iterator  the {@code Iterator} of values to join together, may be null
+     * @param separator  the separator character to use
+     * @return the joined String, {@code null} if null iterator input
+     */
+    public static String join(final Iterator<?> iterator, final char separator) {
+
+        // handle null, zero and one elements before building a buffer
+        if (iterator == null) {
+            return null;
+        }
+        if (!iterator.hasNext()) {
+            return EMPTY;
+        }
+        final Object first = iterator.next();
+        if (!iterator.hasNext()) {
+            return Objects.toString(first);
+        }
+
+        // two or more elements
+        final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
+        if (first != null) {
+            buf.append(first);
+        }
+
+        while (iterator.hasNext()) {
+            buf.append(separator);
+            final Object obj = iterator.next();
+            if (obj != null) {
+                buf.append(obj);
+            }
+        }
+
+        return buf.toString();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/871a0971/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 f123991..d89b8f5 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
@@ -46,6 +46,7 @@ import org.apache.logging.log4j.core.util.NameUtil;
 import org.apache.logging.log4j.core.util.NanoClock;
 import org.apache.logging.log4j.core.util.WatchManager;
 import org.apache.logging.log4j.util.PropertiesUtil;
+import org.apache.logging.log4j.util.Strings;
 
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
@@ -236,7 +237,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
         */
         if (!getPluginPackages().isEmpty()) {
-            xmlWriter.writeAttribute("packages", getPluginPackages().toString()); // TODO comma-separated string
+            xmlWriter.writeAttribute("packages", Strings.join(getPluginPackages(), ','));
         }
         if (!isShutdownHookEnabled()) {
             xmlWriter.writeAttribute("shutdownHook", "disable");


[05/26] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1528

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1528


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

Branch: refs/heads/master
Commit: 7a1cd3a3855562fcef9b144a4931541211f51fb6
Parents: 97f626f 60649ef
Author: Mikael St�ldal <mi...@staldal.nu>
Authored: Fri Aug 19 22:27:51 2016 +0200
Committer: Mikael St�ldal <mi...@staldal.nu>
Committed: Fri Aug 19 22:27:51 2016 +0200

----------------------------------------------------------------------
 .../config/Log4j1ConfigurationFactory.java      |  28 ++-
 .../org/apache/log4j/layout/TTCCLayout.java     | 131 ------------
 .../config/Log4j1ConfigurationFactoryTest.java  |  15 +-
 .../org/apache/log4j/layout/TTCCLayoutTest.java |  82 --------
 .../core/pattern/MessagePatternConverter.java   |  45 +++--
 .../logging/log4j/core/util/ArrayUtils.java     | 124 ++++++++++++
 .../layout/PatternLayoutLookupDateTest.java     |  28 +++
 .../layout/PatternLayoutNoLookupDateTest.java   |  26 +++
 .../log4j/core/layout/PatternLayoutTest.java    |  10 +-
 .../pattern/MessagePatternConverterTest.java    | 197 ++++++++++---------
 .../src/test/resources/log4j-list-nolookups.xml |  29 +++
 pom.xml                                         |   2 +-
 src/changes/changes.xml                         |   8 +-
 src/site/site.xml                               |   2 +
 src/site/xdoc/manual/appenders.xml              |   6 +
 src/site/xdoc/manual/configuration.xml.vm       |   3 +-
 src/site/xdoc/manual/extending.xml              |  14 +-
 src/site/xdoc/manual/layouts.xml.vm             |  12 +-
 18 files changed, 415 insertions(+), 347 deletions(-)
----------------------------------------------------------------------