diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java index 6eadc9596d6..39d36d299eb 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java @@ -42,6 +42,7 @@ import ch.qos.logback.core.joran.spi.RuleStore; import ch.qos.logback.core.joran.util.PropertySetter; import ch.qos.logback.core.joran.util.beans.BeanDescription; import ch.qos.logback.core.model.ComponentModel; +import ch.qos.logback.core.model.IncludeModel; import ch.qos.logback.core.model.Model; import ch.qos.logback.core.model.ModelUtil; import ch.qos.logback.core.model.processor.DefaultProcessor; @@ -326,6 +327,7 @@ class SpringBootJoranConfigurator extends JoranConfigurator { try (ObjectInputStream input = new ObjectInputStream(modelInput)) { Model model = (Model) input.readObject(); ModelUtil.resetForReuse(model); + markIncludesAsHandled(model); return model; } } @@ -335,6 +337,15 @@ class SpringBootJoranConfigurator extends JoranConfigurator { } } + private void markIncludesAsHandled(Model model) { + if (model instanceof IncludeModel) { + model.markAsHandled(); + } + for (Model submodel : model.getSubModels()) { + markIncludesAsHandled(submodel); + } + } + } private static final class PatternRules {