diff --git a/logback-core-blackbox/src/test/blackboxInput/joran/conditional/conditionInsideIf.xml b/logback-core-blackbox/src/test/blackboxInput/joran/conditional/conditionInsideIf.xml
new file mode 100644
index 0000000000..419cb2b37f
--- /dev/null
+++ b/logback-core-blackbox/src/test/blackboxInput/joran/conditional/conditionInsideIf.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ propertyEquals("ki1", "val1")
+
+
+
+
+
+
+
diff --git a/logback-core-blackbox/src/test/java/ch/qos/logback/core/blackbox/joran/conditional/IfThenElseTest.java b/logback-core-blackbox/src/test/java/ch/qos/logback/core/blackbox/joran/conditional/IfThenElseTest.java
index b5f3093f28..5c3fcbb3a0 100644
--- a/logback-core-blackbox/src/test/java/ch/qos/logback/core/blackbox/joran/conditional/IfThenElseTest.java
+++ b/logback-core-blackbox/src/test/java/ch/qos/logback/core/blackbox/joran/conditional/IfThenElseTest.java
@@ -189,6 +189,15 @@ public void whenNoPropertyIsDefined_ElseBranchIsEvaluated_NoJoran() throws Joran
simpleConfigurator.doConfigure(CONDITIONAL_DIR_PREFIX + "if0_NoJoran.xml");
verifyConfig(new String[] { "BEGIN", "b", "END" });
}
+
+ @Test
+ public void conditionNestedWithinIfProducesWarning() throws JoranException {
+ simpleConfigurator.doConfigure(CONDITIONAL_DIR_PREFIX + "conditionInsideIf.xml");
+ assertTrue(checker.containsMatch(Status.WARN,
+ "The element must be placed before the element, not inside it."));
+ verifyConfig(new String[] { "BEGIN", "END" });
+ }
+
// ----------------------------------------------------------------------------------------------------
@Test
diff --git a/logback-core/src/main/java/ch/qos/logback/core/model/processor/conditional/IfModelHandler.java b/logback-core/src/main/java/ch/qos/logback/core/model/processor/conditional/IfModelHandler.java
index fd050aea25..c42a625ced 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/model/processor/conditional/IfModelHandler.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/model/processor/conditional/IfModelHandler.java
@@ -19,6 +19,7 @@
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.joran.conditional.Condition;
import ch.qos.logback.core.model.Model;
+import ch.qos.logback.core.model.conditional.ByPropertiesConditionModel;
import ch.qos.logback.core.model.conditional.IfModel;
import ch.qos.logback.core.model.conditional.IfModel.BranchState;
import ch.qos.logback.core.model.processor.ModelHandlerBase;
@@ -63,6 +64,10 @@ protected Class getSupportedModelClass() {
public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
ifModel = (IfModel) model;
+ if (ifModel.getSubModels().stream().anyMatch(ByPropertiesConditionModel.class::isInstance)) {
+ addWarn("The element must be placed before the element, not inside it.");
+ }
+
mic.pushModel(ifModel);
Object micTopObject = mic.peekObject();
String conditionStr = ifModel.getCondition();