diff --git a/logback-classic/src/test/input/joran/sift/completeCycle.xml b/logback-classic/src/test/input/joran/sift/completeCycle.xml index 622582f42b..4a08a0b995 100644 --- a/logback-classic/src/test/input/joran/sift/completeCycle.xml +++ b/logback-classic/src/test/input/joran/sift/completeCycle.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/compositeProperty.xml b/logback-classic/src/test/input/joran/sift/compositeProperty.xml index 37ed96bd51..4796bc712c 100644 --- a/logback-classic/src/test/input/joran/sift/compositeProperty.xml +++ b/logback-classic/src/test/input/joran/sift/compositeProperty.xml @@ -1,5 +1,5 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/defaultLayoutRule.xml b/logback-classic/src/test/input/joran/sift/defaultLayoutRule.xml index b8753ea78a..59ddaf63b0 100644 --- a/logback-classic/src/test/input/joran/sift/defaultLayoutRule.xml +++ b/logback-classic/src/test/input/joran/sift/defaultLayoutRule.xml @@ -1,4 +1,4 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/fileAppender.xml b/logback-classic/src/test/input/joran/sift/fileAppender.xml index 79bffd0810..862bd91c4e 100755 --- a/logback-classic/src/test/input/joran/sift/fileAppender.xml +++ b/logback-classic/src/test/input/joran/sift/fileAppender.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/hoard0.xml b/logback-classic/src/test/input/joran/sift/hoard0.xml index d1673bf921..b2b3f8d570 100644 --- a/logback-classic/src/test/input/joran/sift/hoard0.xml +++ b/logback-classic/src/test/input/joran/sift/hoard0.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/lingering.xml b/logback-classic/src/test/input/joran/sift/lingering.xml index 5c53496e15..1a312b76ee 100644 --- a/logback-classic/src/test/input/joran/sift/lingering.xml +++ b/logback-classic/src/test/input/joran/sift/lingering.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/maxAppenderCount.xml b/logback-classic/src/test/input/joran/sift/maxAppenderCount.xml index 90c5957d4d..bf00fae38e 100644 --- a/logback-classic/src/test/input/joran/sift/maxAppenderCount.xml +++ b/logback-classic/src/test/input/joran/sift/maxAppenderCount.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/multipleNesting.xml b/logback-classic/src/test/input/joran/sift/multipleNesting.xml index 40d572a0ab..3336f6cf0d 100644 --- a/logback-classic/src/test/input/joran/sift/multipleNesting.xml +++ b/logback-classic/src/test/input/joran/sift/multipleNesting.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/propertyDefinedInSiftElement.xml b/logback-classic/src/test/input/joran/sift/propertyDefinedInSiftElement.xml index 6a08c63a11..23cb3c3560 100644 --- a/logback-classic/src/test/input/joran/sift/propertyDefinedInSiftElement.xml +++ b/logback-classic/src/test/input/joran/sift/propertyDefinedInSiftElement.xml @@ -1,4 +1,4 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/propertyPropagation.xml b/logback-classic/src/test/input/joran/sift/propertyPropagation.xml index ab7ff7dae4..467bae6ec8 100644 --- a/logback-classic/src/test/input/joran/sift/propertyPropagation.xml +++ b/logback-classic/src/test/input/joran/sift/propertyPropagation.xml @@ -1,4 +1,4 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/smoke.xml b/logback-classic/src/test/input/joran/sift/smoke.xml index 846fd14a08..6509e496a5 100644 --- a/logback-classic/src/test/input/joran/sift/smoke.xml +++ b/logback-classic/src/test/input/joran/sift/smoke.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/timeout.xml b/logback-classic/src/test/input/joran/sift/timeout.xml index 854a1b92b7..a2e048c298 100644 --- a/logback-classic/src/test/input/joran/sift/timeout.xml +++ b/logback-classic/src/test/input/joran/sift/timeout.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/unsetDefaultValueProperty.xml b/logback-classic/src/test/input/joran/sift/unsetDefaultValueProperty.xml index 95615cbdd7..c9170d8d07 100644 --- a/logback-classic/src/test/input/joran/sift/unsetDefaultValueProperty.xml +++ b/logback-classic/src/test/input/joran/sift/unsetDefaultValueProperty.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/input/joran/sift/zeroNesting.xml b/logback-classic/src/test/input/joran/sift/zeroNesting.xml index 3c51cc6ef7..e05ced3039 100644 --- a/logback-classic/src/test/input/joran/sift/zeroNesting.xml +++ b/logback-classic/src/test/input/joran/sift/zeroNesting.xml @@ -1,7 +1,7 @@ - + diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/sift/SiftingAppenderTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/sift/SiftingAppenderTest.java index 4de3f36845..df2e569107 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/sift/SiftingAppenderTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/sift/SiftingAppenderTest.java @@ -103,6 +103,7 @@ public void smoke() throws JoranException { List eventList = listAppender.list; assertEquals(1, listAppender.list.size()); assertEquals("smoke", eventList.get(0).getMessage()); + statusChecker.assertIsWarningOrErrorFree(); } private AppenderTracker getAppenderTracker() { diff --git a/logback-core/src/main/java/ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.java b/logback-core/src/main/java/ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.java index c53e7a1270..8ca78f71a2 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.java +++ b/logback-core/src/main/java/ch/qos/logback/core/joran/sanity/AppenderWithinAppenderSanityChecker.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class AppenderWithinAppenderSanityChecker extends ContextAwareBase implements SanityChecker { @@ -34,13 +35,26 @@ public void check(Model model) { List> nestedPairs = deepFindNestedSubModelsOfType(AppenderModel.class, appenderModels); - if(nestedPairs.isEmpty()) - return; + List> filteredNestedPairs = nestedPairs.stream().filter(pair -> !isSiftingAppender(pair.first)).collect(Collectors.toList()); + if(filteredNestedPairs.isEmpty()) { + return; + } addWarn(NESTED_APPENDERS_WARNING); - for(Pair pair: nestedPairs) { + for(Pair pair: filteredNestedPairs) { addWarn("Appender at line "+pair.first.getLineNumber() + " contains a nested appender at line "+pair.second.getLineNumber()); } } + private boolean isSiftingAppender(Model first) { + if(first instanceof AppenderModel) { + AppenderModel appenderModel = (AppenderModel) first; + String classname = appenderModel.getClassName(); + if(classname == null) + return false; + return appenderModel.getClassName().contains("SiftingAppender"); + } + return false; + } + }