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

logging-log4j2 git commit: [LOG4J2-1500] Merging configurations fail with an NPE when comparing Nodes with different attributes. Closes #37.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 5b7b75d5f -> d1c02ee5e


[LOG4J2-1500] Merging configurations fail with an NPE when comparing
Nodes with different attributes. Closes #37.

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

Branch: refs/heads/master
Commit: d1c02ee5e3a863528dfad66a9bbd17c45d475a25
Parents: 5b7b75d
Author: Gary Gregory <gg...@apache.org>
Authored: Fri Aug 5 17:52:25 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Fri Aug 5 17:52:25 2016 -0700

----------------------------------------------------------------------
 .../config/composite/DefaultMergeStrategy.java  |  6 ++-
 .../core/config/CompositeConfigurationTest.java | 19 ++++++++
 .../test/resources/log4j-comp-root-loggers.xml  | 46 ++++++++++++++++++++
 src/changes/changes.xml                         |  3 ++
 4 files changed, 72 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/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 0263ec2..c799e1d 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
@@ -260,10 +260,12 @@ public class DefaultMergeStrategy implements MergeStrategy {
     }
 
     private boolean isSameName(final Node node1, final Node node2) {
-        return node1.getAttributes().get(NAME).toLowerCase().equals(node2.getAttributes().get(NAME).toLowerCase());
+        final String value = node1.getAttributes().get(NAME);
+        return value != null && value.toLowerCase().equals(node2.getAttributes().get(NAME).toLowerCase());
     }
 
     private boolean isSameReference(final Node node1, final Node node2) {
-        return node1.getAttributes().get(REF).toLowerCase().equals(node2.getAttributes().get(REF).toLowerCase());
+        final String value = node1.getAttributes().get(REF);
+        return value != null && value.toLowerCase().equals(node2.getAttributes().get(REF).toLowerCase());
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/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 a4ffa73..8482cf4 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
@@ -18,6 +18,7 @@ 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;
 
@@ -26,6 +27,7 @@ import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.config.composite.CompositeConfiguration;
 import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -110,6 +112,23 @@ public class CompositeConfigurationTest {
         };
         runTest(lcr, test);
     }
+
+    @Test
+    public void testAttributeCheckWhenMergingConfigurations() {
+        final LoggerContextRule lcr = new LoggerContextRule("classpath:log4j-comp-root-loggers.xml,log4j-comp-logger.json");
+        final Statement test = new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                try {
+                    final CompositeConfiguration config = (CompositeConfiguration) lcr.getConfiguration();
+                    Assert.assertNotNull(config);
+                } catch (NullPointerException e) {
+                    fail("Should not throw NullPointerException when there are different nodes.");
+                }
+            }
+        };
+        runTest(lcr, test);
+    }
 /*
     @Test
     public void overrideFilter() {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-comp-root-loggers.xml b/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
new file mode 100644
index 0000000..79ea7e5
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-comp-root-loggers.xml
@@ -0,0 +1,46 @@
+<?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="cat3" level="debug" additivity="false">
+            <AppenderRef ref="File"/>
+        </Logger>
+
+        <Root level="error">
+            <AppenderRef ref="STDOUT"/>
+            <Property name="hostname">server1</Property>
+        </Root>
+    </Loggers>
+
+</Configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d1c02ee5/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index cceb355..77bc02b 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-1500" dev="ggregory" type="fix" due-to="Jose Leon">
+        Merging configurations fail with an NPE when comparing Nodes with different attributes.
+      </action>
       <action issue="LOG4J2-1482" dev="ggregory" type="fix" due-to="Gary Gregory, Sumit Singhal">
         Improper header in CsvParameterLayout.
       </action>