Skip to content

Commit f13d6e6

Browse files
committed
Revert "Merge pull request #33643 from libetl"
This reverts commit 25e8f2d, reversing changes made to e5bc9a2. Unfortunately, upon additional review we realised that these changes should not have been accepted. They're a partial implementation of support for programmatically configuring Logback, implemented in a way that only works during AOT processing and also potentially makes it harder for us to implement full support in the future. Closes gh-34361
1 parent 8a38723 commit f13d6e6

File tree

4 files changed

+6
-82
lines changed

4 files changed

+6
-82
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import java.security.CodeSource;
2121
import java.security.ProtectionDomain;
2222
import java.util.ArrayList;
23-
import java.util.Collection;
24-
import java.util.Collections;
2523
import java.util.List;
2624
import java.util.Set;
2725
import java.util.logging.ConsoleHandler;
@@ -84,8 +82,6 @@ public class LogbackLoggingSystem extends AbstractLoggingSystem implements BeanF
8482

8583
private static final LogLevels<Level> LEVELS = new LogLevels<>();
8684

87-
private Collection<JoranConfigurator> configurators = Collections.emptyList();
88-
8985
static {
9086
LEVELS.map(LogLevel.TRACE, Level.TRACE);
9187
LEVELS.map(LogLevel.TRACE, Level.ALL);
@@ -187,7 +183,7 @@ public void initialize(LoggingInitializationContext initializationContext, Strin
187183
if (isAlreadyInitialized(loggerContext)) {
188184
return;
189185
}
190-
if (!initializeFromAotGeneratedArtifactsIfPossible(initializationContext, this.configurators, logFile)) {
186+
if (!initializeFromAotGeneratedArtifactsIfPossible(initializationContext, logFile)) {
191187
super.initialize(initializationContext, configLocation, logFile);
192188
}
193189
loggerContext.getTurboFilterList().remove(FILTER);
@@ -199,7 +195,7 @@ public void initialize(LoggingInitializationContext initializationContext, Strin
199195
}
200196

201197
private boolean initializeFromAotGeneratedArtifactsIfPossible(LoggingInitializationContext initializationContext,
202-
Collection<JoranConfigurator> configurators, LogFile logFile) {
198+
LogFile logFile) {
203199
if (!AotDetector.useGeneratedArtifacts()) {
204200
return false;
205201
}
@@ -208,8 +204,7 @@ private boolean initializeFromAotGeneratedArtifactsIfPossible(LoggingInitializat
208204
}
209205
LoggerContext loggerContext = getLoggerContext();
210206
stopAndReset(loggerContext);
211-
SpringBootJoranConfigurator configurator = new SpringBootJoranConfigurator(initializationContext,
212-
configurators);
207+
SpringBootJoranConfigurator configurator = new SpringBootJoranConfigurator(initializationContext);
213208
configurator.setContext(loggerContext);
214209
boolean configuredUsingAotGeneratedArtifacts = configurator.configureUsingAotGeneratedArtifacts();
215210
if (configuredUsingAotGeneratedArtifacts) {
@@ -272,7 +267,7 @@ private void reportConfigurationErrorsIfNecessary(LoggerContext loggerContext) {
272267
private void configureByResourceUrl(LoggingInitializationContext initializationContext, LoggerContext loggerContext,
273268
URL url) throws JoranException {
274269
if (url.toString().endsWith(".xml")) {
275-
JoranConfigurator configurator = new SpringBootJoranConfigurator(initializationContext, this.configurators);
270+
JoranConfigurator configurator = new SpringBootJoranConfigurator(initializationContext);
276271
configurator.setContext(loggerContext);
277272
configurator.doConfigure(url);
278273
}
@@ -427,8 +422,6 @@ public BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableL
427422
BeanFactoryInitializationAotContribution contribution = (BeanFactoryInitializationAotContribution) context
428423
.getObject(key);
429424
context.removeObject(key);
430-
this.configurators = beanFactory.getBeansOfType(JoranConfigurator.class).values();
431-
this.configurators.forEach((configurator) -> configurator.setContext(context));
432425
return contribution;
433426
}
434427

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import java.lang.reflect.Method;
2727
import java.lang.reflect.Modifier;
2828
import java.util.Collection;
29-
import java.util.Collections;
3029
import java.util.HashMap;
3130
import java.util.HashSet;
3231
import java.util.Map;
@@ -79,16 +78,8 @@ class SpringBootJoranConfigurator extends JoranConfigurator {
7978

8079
private final LoggingInitializationContext initializationContext;
8180

82-
private final Collection<JoranConfigurator> configurators;
83-
8481
SpringBootJoranConfigurator(LoggingInitializationContext initializationContext) {
85-
this(initializationContext, Collections.emptyList());
86-
}
87-
88-
SpringBootJoranConfigurator(LoggingInitializationContext initializationContext,
89-
Collection<JoranConfigurator> configurators) {
9082
this.initializationContext = initializationContext;
91-
this.configurators = configurators;
9283
}
9384

9485
@Override
@@ -114,7 +105,6 @@ public void addElementSelectorAndActionAssociations(RuleStore ruleStore) {
114105
ruleStore.addRule(new ElementSelector("configuration/springProperty"), SpringPropertyAction::new);
115106
ruleStore.addRule(new ElementSelector("*/springProfile"), SpringProfileAction::new);
116107
ruleStore.addTransparentPathPart("springProfile");
117-
this.configurators.forEach((configurator) -> configurator.addElementSelectorAndActionAssociations(ruleStore));
118108
}
119109

120110
boolean configureUsingAotGeneratedArtifacts() {
@@ -134,7 +124,6 @@ public void processModel(Model model) {
134124
getContext().putObject(BeanFactoryInitializationAotContribution.class.getName(),
135125
new LogbackConfigurationAotContribution(model, getModelInterpretationContext(), getContext()));
136126
}
137-
this.configurators.forEach((configurator) -> configurator.processModel(model));
138127
}
139128

140129
private boolean isAotProcessingInProgress() {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,9 @@
3333
import ch.qos.logback.classic.Level;
3434
import ch.qos.logback.classic.Logger;
3535
import ch.qos.logback.classic.LoggerContext;
36-
import ch.qos.logback.classic.joran.JoranConfigurator;
3736
import ch.qos.logback.classic.spi.LoggerContextListener;
3837
import ch.qos.logback.core.ConsoleAppender;
3938
import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
40-
import ch.qos.logback.core.joran.action.Action;
41-
import ch.qos.logback.core.joran.spi.ActionException;
42-
import ch.qos.logback.core.joran.spi.ElementSelector;
43-
import ch.qos.logback.core.joran.spi.RuleStore;
44-
import ch.qos.logback.core.joran.spi.SaxEventInterpretationContext;
4539
import ch.qos.logback.core.rolling.RollingFileAppender;
4640
import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
4741
import ch.qos.logback.core.util.StatusPrinter;
@@ -52,10 +46,8 @@
5246
import org.slf4j.ILoggerFactory;
5347
import org.slf4j.LoggerFactory;
5448
import org.slf4j.bridge.SLF4JBridgeHandler;
55-
import org.xml.sax.Attributes;
5649

5750
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
58-
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
5951
import org.springframework.boot.convert.ApplicationConversionService;
6052
import org.springframework.boot.logging.AbstractLoggingSystemTests;
6153
import org.springframework.boot.logging.LogFile;
@@ -662,8 +654,7 @@ void customCharset() {
662654

663655
@Test
664656
void whenContextHasNoAotContributionThenProcessAheadOfTimeReturnsNull() {
665-
BeanFactoryInitializationAotContribution contribution = this.loggingSystem
666-
.processAheadOfTime(new DefaultListableBeanFactory());
657+
BeanFactoryInitializationAotContribution contribution = this.loggingSystem.processAheadOfTime(null);
667658
assertThat(contribution).isNull();
668659
}
669660

@@ -672,34 +663,11 @@ void whenContextHasAotContributionThenProcessAheadOfTimeClearsAndReturnsIt() {
672663
LoggerContext context = ((LoggerContext) LoggerFactory.getILoggerFactory());
673664
context.putObject(BeanFactoryInitializationAotContribution.class.getName(),
674665
mock(BeanFactoryInitializationAotContribution.class));
675-
BeanFactoryInitializationAotContribution contribution = this.loggingSystem
676-
.processAheadOfTime(new DefaultListableBeanFactory());
666+
BeanFactoryInitializationAotContribution contribution = this.loggingSystem.processAheadOfTime(null);
677667
assertThat(context.getObject(BeanFactoryInitializationAotContribution.class.getName())).isNull();
678668
assertThat(contribution).isNotNull();
679669
}
680670

681-
@Test
682-
void whenContextHasConfiguratorsThenInitializeExecutesThem(CapturedOutput output) {
683-
LoggerContext context = ((LoggerContext) LoggerFactory.getILoggerFactory());
684-
context.putObject(BeanFactoryInitializationAotContribution.class.getName(),
685-
mock(BeanFactoryInitializationAotContribution.class));
686-
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
687-
beanFactory.registerSingleton("joranConfigurator1", new JoranConfigurator() {
688-
689-
@Override
690-
public void addElementSelectorAndActionAssociations(RuleStore ruleStore) {
691-
ruleStore.addRule(new ElementSelector("*/rule1"), () -> new EmptyAction());
692-
ruleStore.addRule(new ElementSelector("*/rule2"), () -> new EmptyAction());
693-
}
694-
695-
});
696-
this.loggingSystem.processAheadOfTime(beanFactory);
697-
this.loggingSystem.beforeInitialize();
698-
initialize(this.initializationContext, "classpath:logback-custom-rules.xml", null);
699-
assertThat(output).doesNotContain("Ignoring unknown property [rule1] in [ch.qos.logback.classic.LoggerContext]")
700-
.doesNotContain("Ignoring unknown property [rule2] in [ch.qos.logback.classic.LoggerContext]");
701-
}
702-
703671
@Test // gh-33610
704672
void springProfileIfNestedWithinSecondPhaseElementSanityChecker(CapturedOutput output) {
705673
this.loggingSystem.beforeInitialize();
@@ -742,17 +710,4 @@ private String getLineWithText(CharSequence output, CharSequence outputSearch) {
742710
.orElse(null);
743711
}
744712

745-
private static class EmptyAction extends Action {
746-
747-
@Override
748-
public void begin(SaxEventInterpretationContext intercon, String name, Attributes attributes)
749-
throws ActionException {
750-
}
751-
752-
@Override
753-
public void end(SaxEventInterpretationContext intercon, String name) throws ActionException {
754-
}
755-
756-
}
757-
758713
}

spring-boot-project/spring-boot/src/test/resources/logback-custom-rules.xml

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)