Browse Source

Merge pull request #3926 from trecloux/gh-3924_propagate-log-level-to-JUL

* gh-3926:
  Propagates logback log levels to java.util.logging
pull/4212/head
Phillip Webb 11 years ago
parent
commit
e69a5879b0
  1. 6
      spring-boot/src/main/java/org/springframework/boot/logging/Slf4JLoggingSystem.java
  2. 22
      spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackLoggingSystem.java
  3. 12
      spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackLoggingSystemTests.java

6
spring-boot/src/main/java/org/springframework/boot/logging/Slf4JLoggingSystem.java

@ -46,7 +46,7 @@ public abstract class Slf4JLoggingSystem extends AbstractLoggingSystem { @@ -46,7 +46,7 @@ public abstract class Slf4JLoggingSystem extends AbstractLoggingSystem {
private void configureJdkLoggingBridgeHandler() {
try {
if (bridgeHandlerIsAvailable()) {
if (isBridgeHandlerAvailable()) {
removeJdkLoggingBridgeHandler();
SLF4JBridgeHandler.install();
}
@ -56,13 +56,13 @@ public abstract class Slf4JLoggingSystem extends AbstractLoggingSystem { @@ -56,13 +56,13 @@ public abstract class Slf4JLoggingSystem extends AbstractLoggingSystem {
}
}
private boolean bridgeHandlerIsAvailable() {
protected final boolean isBridgeHandlerAvailable() {
return ClassUtils.isPresent(BRIDGE_HANDLER, getClassLoader());
}
private void removeJdkLoggingBridgeHandler() {
try {
if (bridgeHandlerIsAvailable()) {
if (isBridgeHandlerAvailable()) {
try {
SLF4JBridgeHandler.removeHandlersForRootLogger();
}

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

@ -37,6 +37,7 @@ import org.springframework.util.StringUtils; @@ -37,6 +37,7 @@ import org.springframework.util.StringUtils;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.jul.LevelChangePropagator;
import ch.qos.logback.classic.turbo.TurboFilter;
import ch.qos.logback.classic.util.ContextInitializer;
import ch.qos.logback.core.spi.FilterReply;
@ -99,8 +100,7 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem { @@ -99,8 +100,7 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem {
@Override
protected void loadDefaults(LogFile logFile) {
LoggerContext context = getLoggerContext();
context.stop();
context.reset();
stopAndReset(context);
LogbackConfigurator configurator = new LogbackConfigurator(context);
new DefaultLogbackConfiguration(logFile).apply(configurator);
}
@ -112,8 +112,7 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem { @@ -112,8 +112,7 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem {
logFile.applyToSystemProperties();
}
LoggerContext context = getLoggerContext();
context.stop();
context.reset();
stopAndReset(context);
try {
URL url = ResourceUtils.getURL(location);
new ContextInitializer(context).configureByResource(url);
@ -124,6 +123,21 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem { @@ -124,6 +123,21 @@ public class LogbackLoggingSystem extends Slf4JLoggingSystem {
}
}
private void stopAndReset(LoggerContext loggerContext) {
loggerContext.stop();
loggerContext.reset();
if (isBridgeHandlerAvailable()) {
addLevelChangePropagator(loggerContext);
}
}
private void addLevelChangePropagator(LoggerContext loggerContext) {
LevelChangePropagator levelChangePropagator = new LevelChangePropagator();
levelChangePropagator.setResetJUL(true);
levelChangePropagator.setContext(loggerContext);
loggerContext.addListener(levelChangePropagator);
}
@Override
protected void reinitialize() {
getLoggerContext().reset();

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

@ -146,6 +146,18 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests { @@ -146,6 +146,18 @@ public class LogbackLoggingSystemTests extends AbstractLoggingSystemTests {
assertTrue("Wrong output:\n" + output, output.contains("Hello world"));
}
@Test
public void loggingLevelIsPropagatedToJulI() {
this.loggingSystem.beforeInitialize();
this.loggingSystem.initialize(null, null);
this.loggingSystem.setLogLevel(getClass().getName(), LogLevel.DEBUG);
java.util.logging.Logger julLogger = java.util.logging.Logger
.getLogger(getClass().getName());
julLogger.fine("Hello debug world");
String output = this.output.toString().trim();
assertTrue("Wrong output:\n" + output, output.contains("Hello debug world"));
}
@Test
public void jbossLoggingIsConfiguredToUseSlf4j() {
this.loggingSystem.beforeInitialize();

Loading…
Cancel
Save