You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/20 02:11:55 UTC

[2/3] logging-log4j2 git commit: Fix attributes not being merged in composite configurations

Fix attributes not being merged in composite configurations

LOG4J2-1529


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

Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure
Commit: dbe8c3abce06c07a93c071e7d87c5ce6ce1a28c2
Parents: f6dc776
Author: Matt Sicker <bo...@gmail.com>
Authored: Fri Aug 19 20:48:48 2016 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Fri Aug 19 20:48:58 2016 -0500

----------------------------------------------------------------------
 .../config/composite/DefaultMergeStrategy.java  |  1 +
 .../core/config/CompositeConfigurationTest.java | 34 +++++++++++++--
 .../log4j-comp-logger-attr-override.json        | 38 +++++++++++++++++
 .../test/resources/log4j-comp-logger-root.xml   | 44 ++++++++++++++++++++
 src/changes/changes.xml                         |  4 +-
 5 files changed, 116 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dbe8c3ab/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
index c799e1d..9eccdf5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
@@ -155,6 +155,7 @@ public class DefaultMergeStrategy implements MergeStrategy {
                             final Node targetNode = getLoggerNode(targetChildNode, node.getAttributes().get(NAME));
                             final Node loggerNode = new Node(targetChildNode, node.getName(), node.getType());
                             if (targetNode != null) {
+                                targetNode.getAttributes().putAll(node.getAttributes());
                                 for (final Node sourceLoggerChild : node.getChildren()) {
                                     if (isFilterNode(sourceLoggerChild)) {
                                         boolean foundFilter = false;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dbe8c3ab/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
index 8482cf4..1e78cac 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
@@ -16,12 +16,9 @@
  */
 package org.apache.logging.log4j.core.config;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.util.Map;
 
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.appender.FileAppender;
@@ -32,6 +29,8 @@ import org.junit.Test;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
+import static org.junit.Assert.*;
+
 public class CompositeConfigurationTest {
 /*
     @Test
@@ -129,6 +128,33 @@ public class CompositeConfigurationTest {
         };
         runTest(lcr, test);
     }
+
+    @Test
+    public void testAttributeMergeForLoggers() {
+        final LoggerContextRule lcr = new LoggerContextRule("classpath:log4j-comp-logger-root.xml,log4j-comp-logger-attr-override.json");
+        final Statement test = new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                final CompositeConfiguration config = (CompositeConfiguration) lcr.getConfiguration();
+                //Test for Root log level override
+                assertEquals("Expected Root logger log level to be WARN", Level.WARN, config.getRootLogger().getLevel());
+
+                //Test for cat2 level override
+                LoggerConfig cat2 = config.getLogger("cat2");
+                assertEquals("Expected cat2 log level to be INFO", Level.INFO, cat2.getLevel());
+
+                //Test for cat2 additivity override
+                assertTrue("Expected cat2 additivity to be true", cat2.isAdditive());
+
+                //Regression
+                //Check level on cat3 (not present in root config)
+                assertEquals("Expected cat3 log level to be ERROR", Level.ERROR, config.getLogger("cat3").getLevel());
+                //Check level on cat1 (not present in overriden config)
+                assertEquals("Expected cat1 log level to be DEBUG", Level.DEBUG, config.getLogger("cat1").getLevel());
+            }
+        };
+        runTest(lcr, test);
+    }
 /*
     @Test
     public void overrideFilter() {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dbe8c3ab/log4j-core/src/test/resources/log4j-comp-logger-attr-override.json
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-comp-logger-attr-override.json b/log4j-core/src/test/resources/log4j-comp-logger-attr-override.json
new file mode 100644
index 0000000..a6e28aa
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-comp-logger-attr-override.json
@@ -0,0 +1,38 @@
+{
+    "Configuration" : {
+        "status": "error",
+        "name": "LoggerConfigTest",
+        "properties" : {
+          "property" : [{
+            "name" : "filename",
+            "value": "target/composite.log"
+           }]
+        },
+        "Loggers" : {
+            "logger" : [
+                {
+                    "name" : "cat2",
+                    "level" : "info",
+                    "additivity" : true,
+                    "AppenderRef" : {
+                        "ref" : "File"
+                    }
+
+                },
+                {
+                    "name" : "cat3",
+                    "level" : "error",
+                    "AppenderRef" : {
+                        "ref" : "STDOUT"
+                    }
+                }
+            ],
+            "Root" : {
+                "level" : "warn",
+                "AppenderRef" : [{
+                    "ref" : "File"
+                }]
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dbe8c3ab/log4j-core/src/test/resources/log4j-comp-logger-root.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-comp-logger-root.xml b/log4j-core/src/test/resources/log4j-comp-logger-root.xml
new file mode 100644
index 0000000..dcf2605
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-comp-logger-root.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+
+-->
+<Configuration status="ERROR" name="LoggerConfigTest">
+    <Appenders>
+        <Console name="STDOUT">
+            <PatternLayout pattern="%m%n"/>
+        </Console>
+        <File name="File" fileName="${filename}" bufferedIO="false">
+            <PatternLayout>
+                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
+            </PatternLayout>
+        </File>
+    </Appenders>
+
+    <Loggers>
+        <Logger name="cat1" level="debug" additivity="false">
+            <AppenderRef ref="File"/>
+        </Logger>
+
+        <Logger name="cat2" level="debug" additivity="false">
+            <AppenderRef ref="File"/>
+        </Logger>
+        <Root>
+            <AppenderRef ref="STDOUT" />
+        </Root>
+    </Loggers>
+
+</Configuration>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dbe8c3ab/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6664fde..767e097 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,7 +24,9 @@
   </properties>
   <body>
     <release version="2.7" date="2016-MM-DD" description="GA Release 2.7">
-
+      <action issue="LOG4J2-1529" dev="mattsicker" type="fix" due-to="Sridevi Narra">
+        Attributes are not merged properly in composite configurations.
+      </action>
       <action issue="LOG4J2-1527" dev="rpopma" type="fix" due-to="Jose Leon">
         Prevent NPE in RingBufferLogEvent.getFormattedMessage() when used in web applications.
       </action>