Repository: logging-log4j2 Updated Branches: refs/heads/master f6dc77616 -> dbe8c3abc
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/master Commit: dbe8c3abce06c07a93c071e7d87c5ce6ce1a28c2 Parents: f6dc776 Author: Matt Sicker <[email protected]> Authored: Fri Aug 19 20:48:48 2016 -0500 Committer: Matt Sicker <[email protected]> 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>
