Skip to content

Commit 9ff843d

Browse files
committed
fix issues/1016
Signed-off-by: ceki <ceki@qos.ch>
1 parent 769bce0 commit 9ff843d

4 files changed

Lines changed: 31 additions & 6 deletions

File tree

logback-classic-blackbox/src/test/blackboxInput/joran/conditional/topConditionalWithAppenderInclusion.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<include optional="true" resource="missing.xml"/>
66
</then>
77
<else>
8-
<include resource="src/test/input/joran/collision/included.xml"/>
8+
<include file="src/test/blackboxInput/joran/conditional/includedConditionalWithAppenderInclusion.xml"/>
99
</else>
1010
</if>
1111
</configuration>

logback-classic-blackbox/src/test/java/ch/qos/logback/classic/blackbox/joran/BlackboxJoranConfiguratorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import ch.qos.logback.classic.spi.ILoggingEvent;
2525
import ch.qos.logback.classic.util.DefaultJoranConfigurator;
2626
import ch.qos.logback.classic.util.LogbackMDCAdapter;
27+
import ch.qos.logback.core.Appender;
2728
import ch.qos.logback.core.joran.spi.JoranException;
2829
import ch.qos.logback.core.read.ListAppender;
2930
import ch.qos.logback.core.testUtil.RandomUtil;
@@ -133,6 +134,19 @@ public void conditional1673bisWithActiveThen() throws JoranException {
133134
assertNull(listElse);
134135
}
135136

137+
// See also https://github.com/qos-ch/logback/issues/1016
138+
@Test
139+
public void conditionalWithAppenderInclusion() throws JoranException {
140+
String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "conditional/topConditionalWithAppenderInclusion.xml";
141+
configure(configFileAsStr);
142+
Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
143+
Appender<ILoggingEvent> appender = root.getAppender("MISSING");
144+
assertNull(appender);
145+
146+
ListAppender<ILoggingEvent> listElse = (ListAppender<ILoggingEvent>) root.getAppender("LIST");
147+
assertNotNull(listElse);
148+
}
149+
136150
@Test
137151
public void conditional1673bisWithActiveElse() throws JoranException {
138152
String configFileAsStr = BlackboxClassicTestConstants.JORAN_INPUT_PREFIX + "issues/logback_1673bis.xml";

logback-core/src/main/java/ch/qos/logback/core/model/processor/AppenderRefDependencyAnalyser.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,26 @@ protected Class<Model> getSupportedModelClass() {
3636
@Override
3737
public void handle(ModelInterpretationContext mic, Model parentModel) throws ModelHandlerException {
3838

39-
List<AppenderRefModel> appenderRefModels =
40-
parentModel.getSubModels().stream().filter(m -> m instanceof AppenderRefModel).map(m -> (AppenderRefModel) m).collect(Collectors.toList());
39+
System.out.println("Handling " + parentModel);
40+
List<AppenderRefModel> appenderRefModelList = new java.util.ArrayList<>();
4141

42+
getAllAppenderRefModels(appenderRefModelList, parentModel);
4243

43-
for (AppenderRefModel appenderRefModel : appenderRefModels) {
44+
for (AppenderRefModel appenderRefModel : appenderRefModelList) {
4445
String ref = mic.subst(appenderRefModel.getRef());
4546
DependencyDefinition dd = new DependencyDefinition(parentModel, ref);
4647
mic.addDependencyDefinition(dd);
4748
}
4849

4950
}
5051

52+
public void getAllAppenderRefModels(List<AppenderRefModel> list, Model model) {
53+
if(model == null)
54+
return;
55+
if(model instanceof AppenderRefModel) {
56+
list.add((AppenderRefModel) model);
57+
}
58+
model.getSubModels().forEach(subModel -> getAllAppenderRefModels(list, subModel));
59+
}
60+
5161
}

logback-core/src/main/java/ch/qos/logback/core/model/processor/DependencyDefinition.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
*/
2727
public class DependencyDefinition {
2828

29-
// OLD terminology: depender: a component of type Model which depends on a dependee
30-
// NEW terminology: dependent: a component of type Model which depends on a dependency
29+
// OLD terminology: dependee (=dependency), dependent(=depender)
30+
//
31+
// NEW terminology: *dependent*: a component of type Model which depends on a *dependency*
3132
Model depender;
3233
// dependee or dependency: the string name of a component depended upon by the depender of type Model
3334
String dependency;

0 commit comments

Comments
 (0)