Skip to content

Commit 08e9c16

Browse files
committed
Merge pull request #43931 from nosan
* pr/43931: Polish Logback StatusListener code Register Logback StatusListener when using custom Logback file Closes gh-43931
2 parents b9f3d52 + 8536950 commit 08e9c16

File tree

10 files changed

+248
-245
lines changed

10 files changed

+248
-245
lines changed

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

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

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

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,8 @@
3535
import ch.qos.logback.classic.turbo.TurboFilter;
3636
import ch.qos.logback.core.joran.spi.JoranException;
3737
import ch.qos.logback.core.spi.FilterReply;
38-
import ch.qos.logback.core.status.OnConsoleStatusListener;
39-
import ch.qos.logback.core.status.OnErrorConsoleStatusListener;
4038
import ch.qos.logback.core.status.Status;
4139
import ch.qos.logback.core.status.StatusUtil;
42-
import ch.qos.logback.core.util.StatusListenerConfigHelper;
4340
import ch.qos.logback.core.util.StatusPrinter2;
4441
import org.slf4j.ILoggerFactory;
4542
import org.slf4j.Logger;
@@ -216,6 +213,7 @@ private boolean initializeFromAotGeneratedArtifactsIfPossible(LoggingInitializat
216213
LoggerContext loggerContext = getLoggerContext();
217214
stopAndReset(loggerContext);
218215
withLoggingSuppressed(() -> putInitializationContextObjects(loggerContext, initializationContext));
216+
SystemStatusListener.addTo(loggerContext);
219217
SpringBootJoranConfigurator configurator = new SpringBootJoranConfigurator(initializationContext);
220218
configurator.setContext(loggerContext);
221219
boolean configuredUsingAotGeneratedArtifacts = configurator.configureUsingAotGeneratedArtifacts();
@@ -230,21 +228,16 @@ protected void loadDefaults(LoggingInitializationContext initializationContext,
230228
LoggerContext loggerContext = getLoggerContext();
231229
stopAndReset(loggerContext);
232230
withLoggingSuppressed(() -> {
233-
putInitializationContextObjects(loggerContext, initializationContext);
234231
boolean debug = Boolean.getBoolean("logback.debug");
235-
if (debug) {
236-
StatusListenerConfigHelper.addOnConsoleListenerInstance(loggerContext, new OnConsoleStatusListener());
237-
}
238-
else {
239-
addOnErrorConsoleStatusListener(loggerContext);
240-
}
232+
putInitializationContextObjects(loggerContext, initializationContext);
233+
SystemStatusListener.addTo(loggerContext, debug);
241234
Environment environment = initializationContext.getEnvironment();
242235
// Apply system properties directly in case the same JVM runs multiple apps
243236
new LogbackLoggingSystemProperties(environment, getDefaultValueResolver(environment),
244237
loggerContext::putProperty)
245238
.apply(logFile);
246-
LogbackConfigurator configurator = debug ? new DebugLogbackConfigurator(loggerContext)
247-
: new LogbackConfigurator(loggerContext);
239+
LogbackConfigurator configurator = (!debug) ? new LogbackConfigurator(loggerContext)
240+
: new DebugLogbackConfigurator(loggerContext);
248241
new DefaultLogbackConfiguration(logFile).apply(configurator);
249242
loggerContext.setPackagingDataEnabled(true);
250243
loggerContext.start();
@@ -261,6 +254,7 @@ protected void loadConfiguration(LoggingInitializationContext initializationCont
261254
if (initializationContext != null) {
262255
applySystemProperties(initializationContext.getEnvironment(), logFile);
263256
}
257+
SystemStatusListener.addTo(loggerContext);
264258
try {
265259
Resource resource = ApplicationResourceLoader.get().getResource(location);
266260
configureByResourceUrl(initializationContext, loggerContext, resource.getURL());
@@ -491,15 +485,6 @@ private void withLoggingSuppressed(Runnable action) {
491485
}
492486
}
493487

494-
private void addOnErrorConsoleStatusListener(LoggerContext context) {
495-
FilteringStatusListener listener = new FilteringStatusListener(new OnErrorConsoleStatusListener(),
496-
Status.ERROR);
497-
listener.setContext(context);
498-
if (context.getStatusManager().add(listener)) {
499-
listener.start();
500-
}
501-
}
502-
503488
void setStatusPrinterStream(PrintStream stream) {
504489
this.statusPrinter.setPrintStream(stream);
505490
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright 2012-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.logging.logback;
18+
19+
import java.io.PrintStream;
20+
21+
import ch.qos.logback.classic.LoggerContext;
22+
import ch.qos.logback.core.status.OnPrintStreamStatusListenerBase;
23+
import ch.qos.logback.core.status.Status;
24+
import ch.qos.logback.core.status.StatusListener;
25+
26+
/**
27+
* {@link StatusListener} used to print appropriate status messages to {@link System#out}
28+
* or {@link System#err}.
29+
*
30+
* @author Dmytro Nosan
31+
* @author Phillip Webb
32+
*/
33+
final class SystemStatusListener extends OnPrintStreamStatusListenerBase {
34+
35+
private final boolean debug;
36+
37+
private SystemStatusListener(boolean debug) {
38+
this.debug = debug;
39+
}
40+
41+
@Override
42+
public void addStatusEvent(Status status) {
43+
if (this.debug || status.getLevel() >= Status.WARN) {
44+
super.addStatusEvent(status);
45+
}
46+
}
47+
48+
@Override
49+
protected PrintStream getPrintStream() {
50+
return (!this.debug) ? System.err : System.out;
51+
}
52+
53+
static void addTo(LoggerContext loggerContext) {
54+
addTo(loggerContext, false);
55+
}
56+
57+
static void addTo(LoggerContext loggerContext, boolean debug) {
58+
SystemStatusListener listener = new SystemStatusListener(debug);
59+
listener.setContext(loggerContext);
60+
if (loggerContext.getStatusManager().add(listener)) {
61+
listener.start();
62+
}
63+
}
64+
65+
}

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

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

0 commit comments

Comments
 (0)